The HbA1c Testing market covers all the important information associated with the market such as target market, market size, share, current trends, challenges, restraints, competition analysis, and market potential during the forecast period of 2018 to 2025. The report gives an overall market view that helps to understand the environment of the business and allow to discern the threats and opportunities associated with area of industry.
The growth of the HbA1c testing market is mainly growing on the ground of rising number of diabetes population. Moreover, the advent of new technologies in diabetes management along with the rising awareness of diabetes among people is further expected to propel the growth. Increasing medical tourism in developing nations is likely to open a new opportunity for the market. On the other hand, the high cost of the device is likely to hamper the growth of the market.
According to the global HbA1c Testing Market report published by Value Market Research, the market is expected to touch USD 3.3 BN by 2024, with a CAGR of 10.5% growing from USD 1.75 BN in 2017.
The key players in the HbA1c testing market include Abbott Laboratories, Alere, Inc., Arkray, Inc., Bio-Rad Laboratories, Inc., Danaher Corporation, F. Hoffmann-La Roche Ltd., Siemens Healthcare, Transasia Biomedicals ltd., and Trinity Biotech plc.
The broad HbA1c testing market has been sub-grouped into device type, technology and end-user. The report studies these subsets with respect to the geographical segmentation. The strategists can gain a detailed insight and devise appropriate strategies to target specific market. This detail will lead to a focused approach leading to identification of better opportunities.
Furthermore, the report comprises of the geographical segmentation which mainly focuses on current and forecast demand for HbA1c testing in North America, Europe, Asia Pacific, Latin America, and Middle East & Africa. The report further focuses on demand for individual application segments in all the regions.


text:
Tread Strong: Support BIDMC's 2019 Boston Marathon Team
BIDMC Communications
Team BIDMC runner Marc Mendoza (middle) with his brother, Chris (left), and his late father, Dr. Renato Mendoza (right).
Marc Mendoza has been surrounded by people who work in healthcare for as long as he can remember. His father was a pediatrician, his mother and sister are nurses, and his fiancé is a midwife.
"Healthcare feels like home," he says.
As an employee in the Development Office at BIDMC, Marc appreciates working alongside clinicians and care teams. "It's a privilege to encounter and work with medical teams that continue to save and change lives on a daily basis," Marc says.
First hand, Marc says he witnessed this amazing care when his father was a patient of the Cancer Center at BIDMC. "My entire family was cared for compassionately. My dad passed away in 2015, and I now work with folks who knew him," he says. "It helps his memory live on and is really special."
An avid runner, Marc joined Team BIDMC to conquer the Boston Marathon for a second time in his father's honor. Funds donated in support of Marc will directly benefit the innovative work by physicians, staff and researchers of the Cancer Center.
"I knew it was time to run this race again for my dad and for everyone who has been impacted by cancer," he says. "Any injuries I face and the long training runs I go on truly pale in comparison to the stories of those fighting cancer."
Read more about Marc's journey and support Team BIDMC.
About Beth Israel Deaconess Medical Center
Beth Israel Deaconess Medical Center is a patient care, teaching and research affiliate of Harvard Medical School and consistently ranks as a national leader among independent hospitals in National Institutes of Health funding.
BIDMC is in the community with Beth Israel Deaconess Hospital-Milton, Beth Israel Deaconess Hospital-Needham, Beth Israel Deaconess Hospital-Plymouth, Anna Jaques Hospital, Cambridge Health Alliance, Lawrence General Hospital, Signature Healthcare, Beth Israel Deaconess HealthCare, Community Care Alliance and Atrius Health. BIDMC is also clinically affiliated with the Joslin Diabetes Center and Hebrew Rehabilitation Center and is a research partner of Dana-Farber/Harvard Cancer Center and the Jackson Laboratory. BIDMC is the official hospital of the Boston Red Sox. For more information, visit www.bidmc.org.
BIDMC is part of Beth Israel Lahey Health, a new health care system that brings together academic medical centers and teaching hospitals, community and specialty hospitals, more than 4,000 physicians and 35,000 employees in a shared mission to expand access to great care and advance the science and practice of medicine through groundbreaking research and education.
Share by Email Share on Twitter Share on Facebook Share on LinkedIn

redpajama_set_name: RedPajamaCommonCrawl


A while back, we shared a collection of awesome nonprofits that are doing Twitter right and the response was overwhelming.
That's why, just in time to revamp your timeline for the fall, we thought you could use 50 more social-savvy organizations to follow, fav, and RT.
More than ever, organizations are serving up content across various social platforms and media: Instagram, Periscope, podcasts, oh my! These nonprofits are experts at cultivating rich online presences and sharing the love with their followers.
Think it's impossible to have a real, substantive conversation in 140 characters? Think again. These organizations have upped the dialogue game by perfecting the art of Twitter chats.
Providing your followers with interesting, relevant content, both original and curated, showcases your organization's role as a thought leader and leaves audiences hungry for more great content. Take a cue from these nonprofits!
Nonprofits are seeing the benefits rallying their bases on Twitter to collect donations. Learn a valuable lesson from these organizations: fundraising doesn't have to be limited email!
Nonprofits haven taken a page out of the books of popular brands and stepped up their engagement with supporters on Twitter. Organizations like these are implementing new strategies to connect and seeing great results.
Read all about it! Social media is uniquely positioned to take your conversation to the the next level. These organizations are great examples of leveraging Twitter as a social sounding board for their causes.
No surprise here -- engaging content still reigns as the key strength for successful nonprofit social media outreach. These organizations do a great job at sharing compelling stories and information that make a real impact.
Did your favorite organization make our list? Let us know! Follow @EveryActionHQ and tell us why you follow nonprofits on Twitter.


text:
Novak Djokovic leaves Melbourne amid Serbian fury and Australian border brag
News Coronavirus Suburban testing slump sparks worries, despite Vic's COVID-free day
12:11pm, Jun 11, 2021 Updated: 12:30pm, Jun 11
Suburban testing slump sparks worries, despite Vic's COVID-free day
Craigieburn residents have been urged to get tested for COVID after a bump in cases in their area. Photo: AAP
The New Daily @TheNewDailyAU
Residents of one Melbourne suburb have been particularly urged to get tested for the virus after a worrying slump in testing numbers across the city.
Victoria achieved its first "doughnut day" in weeks on Friday, with no locally acquired coronavirus cases as millions of Melburnians emerged from lockdown.
It is the first day since mid-May, when Victoria's latest outbreaks began to emerge, that there have been no community cases in the state.
"It is good news and news I know everyone in Victoria wanted to hear," Acting Premier James Merlino said.
Tweet from @VicGovDH
But he said there was no room for complacency, especially as testing numbers plunged in Victoria during Thursday's wild storms. There were more than 17,000 coronavirus tests across the state in the 24 hours to Friday morning – well down on peaks of 50,000-plus at the height of the recent COVID crisis.
Authorities are particularly concerned about Craigieburn, in the city's north, where many infections have been concentrated. There are additional concerns for Craigieburn Central, a busy shopping centre that has been linked to at least nine of the most recent cases.
"In some areas, where we would like to see an uplift [in testing] because of community transmission, it was lower than we would have liked," Mr Merlino said.
"If you live in the Craigieburn area and did not get tested yesterday, please go out and get tested today."
Chief health officer Brett Sutton warned Victorians not to expect a run of days without new community infections.
"We have thousands of primary close contacts, some of which will become positive," he said.
"[But] it is not a concern as they have been quarantined for the entire period."
There are still 3400 close contacts in isolation in Victoria, after a further 900 were cleared to head back into the community on Thursday.
"[We've seen] terrific testing numbers but we must maintain them. We are at the halfway point in many respects. A day of zero cases is terrific," Professor Sutton said.
"There is a lot of work to do for those primary contacts, there are potential trains of transmission to be run down."
He said many Victorians should be prepared to have several coronavirus tests throughout winter, as cold and wet conditions brought on respiratory symptoms.
Friday's doughnut day also came after a worrying development on Thursday, with confirmation of mystery infections in four members of family from Reservoir, in Melbourne's north.
None is a close contact of anyone who has the virus, and none has visited any exposure sites.
"This is a real lesson that we might still see cases. Still lots of investigation to go, and a reason for everybody with symptoms to get tested because you could be a part of this unknown chain of transmission," Professor Sutton said.
Genomic testing has confirmed the family has the Kappa variant of the virus.
There have also been wastewater detections of the virus across Melbourne, including Pascoe Vale, Scoresby and Vermont, and some suburbs in the Whitehorse, Manningham and Monash local government areas.
Anyone with respiratory symptoms in those areas is also urged to get tested.
While Melbourne's easing of restrictions went ahead at midnight on Thursday as planned, residents must continue to wear masks whenever they leave their homes.
They are also restricted to a 25-kilometre travel limit from home.
Virus rules have also been further relaxed in regional Victoria.
Meanwhile, Victorian health officials have finished interviewing a couple who left outer-suburban Melbourne during the extended lockdown. They drove through NSW to Queensland and tested positive for the virus while staying with the woman's parents on the Sunshine Coast.
The couple remains under investigation by Queensland Police.
The woman and her husband left Melton, in Melbourne's outer west, on June 1, reportedly so he could start a new job on the Sunshine Coast. She tested positive on Wednesday, followed by him on Thursday, after their road trip through regional NSW and into Queensland.
However, Queensland health authorities are confident the couple are at the end of their infection period.
They say the couple did not apply for a travel exemption to enter the state.
Testing has been boosted in regional NSW and Queensland following the couple's diagnoses. So far, neither state has reported further community-acquired cases.
Coronavirus victoria
'This is an offence': Five more Victorians dodge Qld border rules


I'm not a Grockle*, I live here!
I live in a tourist town. It's a great feeling actually living somewhere that people save up their cash and time to visit on vacation. Well most of the time! I do sympathize with other locals who find their lives disrupted during 'the season' by what they perceive as traffic gridlock, full restaurants, and sometimes inflated prices, but I have a slightly different view, brought on by my lifetime obsession with tourism and the fact that my income is directly dependent on it.
Growing up, I lived near London and just ten miles from Windsor Castle and a host of other tourist centers. At one time it was common for residents to wear button badges saying 'I'm not a tourist – I live here'. I must confess that when you're trying to get to a business appointment, or just grabbing a lunchtime sandwich and you're held up by a bunch of visitors with no perception of time, personal space or local customs it can get a mite, shall we say, irritating!
Having it pointed out to me that if it wasn't for the tourists, I probably wouldn't have a job, or the local amenities I enjoyed, didn't initially help, but gradually I got the message and came to be tolerant and then respect (I think love may be going too far!) the visitors.
So, living in a tourist area has its challenges but what can those of us in the industry do to convince our fellow residents, who may have no immediate connection to tourism, that it's a good thing to be in a place that others want to visit?
Destination Marketing Organizations have a duty to promote their areas to tourists. It's their whole raison d'etre, but it's my feeling that education of the locals is also a duty. DMOs do need to firstly let their residents know how they are promoting, what they're promoting and importantly, why. Many residents think that visitors know an area exists and therefore promotion isn't needed. It's a fair point, but obviously incorrect to those of us involved.
It's pretty pointless running ads in local media if you're trying to attract visitors into a market, but you should at least share the ads you're running out of market so that your locals know and understand what's happening.
It's also no bad thing to tell your locals why tourism is so important. Here in Florida there is no state income tax. That's because 24% of sales tax is paid by tourists, so for locals that's a very good thing and something of which they should be aware and not forget. It also matters that for someone who doesn't think they work in tourism, that they see how their income is invariably linked to the success of local tourism, however indirectly. Nobody but the DMO is in a position to share that information.
Lastly, there's room to involve the locals in helping tourists. Who but a resident knows the best restaurants, or best attractions? Who else would know the history of a place, or indeed where to avoid!
Perhaps the DMO should issue button badges that say 'I'm a local – ask me'!
*'Grockle' is an informal and often slightly derogatory term for a tourist. It was first popularized because of its use by the characters in the film The System (1964), which is set in the Devon resort of Torquay during the summer season. Some older dictionaries suggested that it might be an English West Country dialect word.


The Roy/Weber Justice Court prosecutes cases involving such matters as assaults, domestic violence, drug possession, small claims, traffic safety, and City/County code violations.
Jurisdictions covered by the Roy/Weber Justice Court include Roy, Hooper, West Haven, and unincorporated Weber County.
The Roy/Weber Justice Court holds sessions Monday - Thursday.
Payments can be made online or in person during our business hours. We do NOT take payments over the phone.


Wilson Bathrooms is a local, independent business that has over 35 years' experience delivering exceptional bathroom designs, renovations and instalments as well as an array of additional plumbing and heating services. Our entirely bespoke services are carefully tailored to each individual's needs, styles and budget, so you're sure to find an all-encompassing bathroom service that is right for you.
From plumbing and heating to boiler replacement, to a substantial bathroom makeover, we aim to inspire our customers with our exceptional, high-quality solutions and services. Our distinguished reputation within the local community and beyond is a result of our prompt, efficient and professional service that has kept our clients coming back to us time and time again.
If you would like to request a quotation, have an emergency plumbing or boiler issue, or simply need to ask a question, please contact us on 07714 211311 or fill in your details in the following form and we will endeavour to get back to you as soon as possible.


Plus, we have a rough opening schedule!
Did you know that Southern California is home to some world-class theme parks?
And world-class theme parks deserve world-class roller coasters! Knott's Berry Farm in Southern California is the place to be for amazing thrill rides, water rides and a guaranteed good time.
Although Florida has traditionally been the theme park capital of the world, California is also rapidly becoming a theme park destination for customers from the UK taking advantage of amazing flight deals and looking for new pastures to explore.
Following on from the glitz and glamour of the Oscars, we take a look at how you can experience some of your favourite movies at America's greatest theme parks and movie locations across the globe with Attraction Tickets Direct.


We are dedicated to promoting the visual arts in the diverse communities of our region with educational and exhibition opportunities for artists at all levels of accomplishment.
Founded in 1926, OSA is a non-profit organization with over 500 members, and is staffed almost entirely by volunteers. Hosting daily classes, workshops, open studios, and gallery exhibitions in hopes of increasing accessibility to the arts for all.
Through OSA, I have been helping to promote Oregon artists by providing exhibit opportunities, coordinating educational programs, and doing various art-related projects for the community.
I have always had a heart for the arts. There is a truly unique experience in seeing the inner self of someone else made manifest in the medium of their choice. Perhaps even more profound is the way in which the work of others can root itself into the mind and life of the viewer, forever shaping future ideologies and expanding the capacity for understanding. I have also always had a heart for people. The acts of learning, listening, and knowing through interaction and relationship.
During my time at OSA, I have seen how important it is to have a collaborative effort in sustaining a community. Though there are so many teachers and students, volunteers and members, everyone seems to put in a great energy to make sure everyone is being supported. Whether it be the inclusive beckoning of all artists, or the impactful workshops that are put on regardless of skill level, I have enjoyed being able to help with maintaining a space that is dedicated to seeing others thrive in the arts. I have even seen my own passions and hobbies become part of the effort, such as DJing for gallery exhibitions or documenting events through photography. To bring in those elements of myself has allowed me to gain a greater sense of connection to the organization, and making it feel more personal when I am there. It has also been encouraging to know from the other members that my work is appreciated. Whether it's talking to the director about marketing, or teachers about promoting their workshops through our social media channels, or even from casually talking to students about their art work. In every small and big picture way, my time at OSA has given me great insight into the larger sense of connection that we as human beings need to feel like we belong in this world, and that our contribution is appreciated.


> notice) basis last year when we lost our CSI hosting.
and +1 from me, too.
alternatives.   they raise fair questions.
represent the likely suspicions of the donors.
but they shouldn't *have* to.
hosting is just not sustainable, ethically.
goes, and why it's needed.
hosting services actually *is* "offset" by the cash coming in, or not.
comes from, and where it goes.
support some higher purposes, once those purposes are clearly defined.


How much does an Intaglio Press Operator in the federal government get paid? $112,554.96* *Based on the 2017 average.
Intaglio Press Operator was the 359th most popular job in the U.S. Government in 2017, with 137 employed. The most common payscale was the currency manufacturing payscale.
In 2017, the Bureau of Engraving and Printing hired the most employees titled Intaglio Press Operating, with an average salary of $112,555.
The average pay for an Intaglio Press Operator is $112,554.96. The highest paid Intaglio Press Operator made $155,616 in 2017.


Clean lines and lovely warm timber tones and beautifully constructed. This classical piece is laden with many sophisticated finishing touches. Made with care with durable and quality construction, this will be a purchase you won't regret.


text:
Andrew Bird: Break It Yourself
Christopher Bahn
Break It Yourself
Andrew Bird
Mom + Pop
Andrew Bird's songwriting approach is seemingly paradoxical, at once highly improvisational and long-simmering, with material sometimes taking years to finally gel together. The results are familiar to anyone who's followed his string of breezily baroque albums over the last decade, full of virtuosic and engaging inter-weavings of melodies and loops spun from violin, whistling, guitar, and Bird's warbling tenor. While his songs are elegantly crafted and artfully arranged, he's careful not to lose the sense that music is about creating a space to explore, to wander through and maybe even get lost in. That's certainly the case with his sixth solo album, Break It Yourself.
Working with his longtime, improv-friendly backing band of Martin Dosh, Jeremy Ylvisaker, and Mike Lewis, Bird recorded Break It Yourself in a loose-knit weeklong session at his barn outside of Chicago, capturing the performances largely live. The approach pays dividends in creating an off-the-cuff atmosphere for songs that have probably been honed and re-imagined frequently, often making Break It Yourself feel as if it's being created on the spot.
It's extraordinarily intimate at times, especially given the overarching theme of heartbreak and broken connections that suffuses the album. Which is not to say that Break It Yourself is ever nakedly and painfully personal. That is simply not Bird's style, and even when his lyrics veer toward the confessional, they're couched inside oblique and ambivalently calm language. "Lazy Projector" spins out a metaphor on the untrustworthiness of memory as the deliberately crafted fiction of a movie, edited and recast to smooth out the sharp edges of truth, before finally throwing in a direct statement: "I can't see the sense in us breaking up at all." From such a normally reserved songwriter, the line explodes like a depth charge.
On "Lusitania," Bird turns to maritime war history—the ship sinkings that helped launch the U.S. into two wars—for another metaphor on a destroyed relationship, but shifts both mood and metaphor with a gently lilting guest vocal from St. Vincent's Annie Clark nicely underplaying a verse about the electricity of a new connection. It's indicative of a beautifully free-flowing set of tunes that soar and waft like a flock of starlings, building to a quietly epic mood that is too ruminative and introspective to suffer from grandiosity.
Recent from Christopher Bahn
Doctor Who (Classic): "Survival"
Doctor Who (Classic): "Pyramids Of Mars"
Doctor Who (Classic): "The Armageddon Factor"


text:
layout: article-nosidebar
title: 'Sheetsu Clone'
subtitle: 'Homework 5'
permalink: /homework/5-sheets
parent: homework
active: 'homework'
---

{% assign lvl = page.url | append:'X' | split:'/' | size %}
{% capture relative %}{% for i in (3..lvl) %}../{% endfor %}{% endcapture %}

In this homework, you will be creating NodeJS server that can read, write, and delete data from a Google Spreadsheet. These operations are also called [CRUD operations](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete), though we are making the "U"/"Update" operation extra credit.

You will be writing a stripped-down clone of [Sheetsu](https://sheetsu.com/), which is a service that turns Google Spreadsheets into a REST API. Sheetsu charges a pretty obscene price of [$19 to $95 per month](https://sheetsu.com/pricing) for this service. You will be implementing the same service for free.

You will notice that this assignment involves a lot more non-coding steps compared to the previous homeworks. That is because setting up and deploying a backend often involves a lot of non-coding tasks. For example, we walk you through creating a Google Service Account, which you would also need to do to use Google Cloud. To compensate for the tricky setup, though, we tried to streamline the coding requirement: You are only required to complete 3 functions.

**This assignment requires a fair amount of setup.** Please try to get through the steps marked "SETUP:" by **May 26** so that the course staff can assist you in person before the holiday weekend if necessary.

Due Date: Wed, May 31, 2017 at 11:59pm _(late cutoff: Thu, June 1, 2017 at 11:59pm)_
**NOTE:** We changed the due date to 5/31, but the late cutoff is still the same (6/1).
Setup steps: We strongly suggest you complete the steps marked "SETUP:" by Thursday, May 26, so that we can assist you well ahead of time if you need help. We do not guarantee to be available for troubleshooting setup issues over the holiday weekend.
HW5 Turn-in: [Submission Form](https://goo.gl/forms/LuTWdK9S3510x5ys1)

---

* TOC
{:toc}

## 1. Getting started

### 1. Accept the HW5 assignment
{:.no_toc}

- [Follow this link](https://classroom.github.com/assignment-invitations/6cd338ce368a3ff93b1555bc2f4d67bb), where HW5 is stored on GitHub Classroom.
- Accept the homework and download the starter code as you did in [Homework 0]({{relative}}homework/0-welcome).

### 2. Install Node v7
{:.no_toc}

**NOTE: You may need to reinstall Node!** An earlier version of the [Node Installation instructions]({{relative}}install-node) had you downloaded Node v6 instead of v7. Since we want you to use `async` functions, which are only available in Node v7+, we need you to **reinstall** Node and download Version 7.10 / the "Current: Latest Features" installer instead.

- Follow the [Node Installation instructions]({{relative}}install-node).
- Make sure you have the right version of `node` by running `node -v` in your terminal. You should see v7.10:

## 2. SETUP: Create a Google Service Account

In order to have our NodeJS server write to a Google Spreadsheet, the server must have permission to write to the spreadsheet.

Google allows two ways of doing this:
1. OAuth 2.0: This allows a user to log in and manage spreadsheets *owned by the user*. This is not what we want; we want to be able to write to a single spreadsheet that we own.
2. **Server-to-Server:** This allows our NodeJS server to talk to Google's servers directly, e.g. to write to a spreadsheet. This is what we want to do.

To have our NodeJS server write to a Google Spreadsheet, we need to set up two things:
- A Google Service Account (GSA)
- A Google Service Account key

This section contains the instructions for obtaining both a Google Service Account and a GSA key, and how to move the key to the HW5 starter code.

### 0. Log into your @gmail account
{:.no_toc}
- Sign into your Gmail account.
  - **Your @stanford account will not work for this part,**  even though you can access Gmail through it. You must use an @gmail.com account. ([see piazza post](https://piazza.com/class/j0y7gmnuoh167p?cid=161))
  - [Create a Gmail account](https://accounts.google.com/SignUp) for free if you need to.

### 1. Add the Google Sheets API
{:.no_toc}

- Navigate to [https://console.developers.google.com](https://console.developers.google.com).

- In the API search box, type "Google Sheets API". When it comes up, click on "Google Sheets API."

### 2. Create a project
{:.no_toc}

- You will now need to create a project. Click the "Create Project" button.

- You may get a dialog message that looks like the one below. If you do, click "Create".

- Enter any project name, such as "CS193x HW5."

- You will see an [intermediate loading screen](images/hw5-gsa-new-project-loading.png), then it will take you back to the Google Sheets API page.

### 3. Enable the API
{:.no_toc}

- Click the "Enable" button. You will be taken to the Credentials page.

### 4. Create Google Service Account + key
{:.no_toc}

- Click the "Create Credentials" button. This will take you to the Credentials wizard.

- Fill out the first part of the wizard as follows:
  - Which API are you using? **Google Sheets API**
  - Where will you be calling the API from? **Web server**
  - What data will you be accessing? **Application data**
  - Are you using Google App Engine or Google Compute Engine? **No, I'm not using them**
- Then click "What credentials do I need?" This will prompt you to create a Google Service Account.

- Fill out "Create a service account" second part of the form as follows:
  - Service account name: Any name you'd like, e.g. "**HW5 sheets**"
  - Role: **Project -> Owner**
  - Key type: **JSON** (this is selected by default)
- Then click "Continue."

- This will immediately download your Google Service Account credentials JSON file for you.
  - **Make note of where this file was downloaded!** We will refer to this file again soon.

### 5. Add Google Drive API
{:.no_toc}

- After you've created a Google Service Account, you will be taken back to the Credentials screen. From this screen, click "Library" on the left sidebar.

- Search for "google drive api," then click on "Google Drive API" when it comes  up.

- Click "Enable", like you did for the Google Sheets API

We are now done with the Google Developers Console.

### 6. Copy GSA credentials to `privateSettings.json`
{:.no_toc}

- In Atom, open the credentials JSON file that was downloaded for you at the end of Step 4. It should look something like this:

  - The most important entries are the `private_key` and `client_email` fields.
- In Atom, also open your HW5 starter code and the `privateSettings.json` file. `privateSettings.json` should be completely empty.
- Now copy the contents of the credentials JSON file into `privateSettings.json`.

## 3. SETUP: Create a GSA spreadsheet

In this section, you will create a special Google spreadsheet to which your NodeJS server will be able to write data. To do this, you will need to create a spreadsheet via the `cs193x-sheets` command-line tool, distributed on `npm`.

### 1. Install `cs193x-sheets`
{:.no_toc}

- In your terminal, navigate to the directory that contains the HW5 starter code you downloaded from GitHub.
  - If you need help working a terminal, [see guide here]({{relative}}install-node)

- Run `npm install -g cs193x-sheets` to install the cs193x-sheets command-line tool.
  - You may need to use `sudo`.
  - You will use this command-line tool to create spreadsheets that your NodeJS server can write to.

### 2. Run `cs193x-sheets`
{:.no_toc}

- Now run the `cs193x-sheets` command:

- Type "c" to create a new spreadsheet and enter the following:
  - Title of spreadsheet: Anything you'd like, e.g. "**HW5 spreadsheet**"
  - Enter your email: Your email address (must be a Gmail-enabled account, such as @gmail or @stanford)
- Afterward the tool will print out "Spreadsheet created" with the URL of your new spreadsheet.
  - The only people who can access this spreadsheet are you (via the email you entered) and the course staff.

**NOTES:**

Technically the spreadsheet you just created is owned by your Google Service Account, and not your public Gmail account, which is why you need to use the command-line tool to create and manage the spreadsheet. You cannot access Google Service Account documents via Google's web interface.

Also, you must always run `cs193x-sheets` in the same directory as `privateSettings.json`, so that it can access your Google Service Account credentials.

### 3. Open your spreadsheet and fill with some fake data
{:.no_toc}

- Open the spreadsheet you just created via command-line
- Fill it out with fake data [like in this spreadsheet](https://docs.google.com/spreadsheets/d/1GYI-P9g2-7g9PtF8ygZ8LNV8FrGaTpz9f3G-eVTj370/edit?ts=591e76d4#gid=0)
  - **The first row of your spreadsheet should be the column labels.**

## 4. SETUP: Set up the starter code

At last, you are ready to configure the starter code and get working on the assignment!

**Note:** In this assignment, you will not need to modify any of the code in `public/`, including `public/js/script.js`.

### 1. Set `SPREADSHEET_ID` in `server.js`
{:.no_toc}

- Open `server.js` from the HW5 starter code in Atom
- Change the value of SPREADSHEET_ID to the ID of your spreadsheet. This is the long series of numbers, letters, and dashes after the `d/` in the Google Spreadsheets URL.
  - For example, in `https://docs.google.com/spreadsheets/d/1GYI-P9g2-7g9PtF8ygZ8LNV8FrGaTpz9f3G-eVTj370`, the Spreadsheet ID is **1GYI-P9g2-7g9PtF8ygZ8LNV8FrGaTpz9f3G-eVTj370**

### 2. Run `npm install`
{:.no_toc}

- In the terminal, make sure you are still in the directory that contains the HW5 starter code you downloaded from GitHub.
- Run `npm install`

### 3. Run `npm start`
{:.no_toc}

- Now run `npm start` to start your server. You should see the "Server listening on port 3000!" message.

### 4. Test `http://localhost:3000`
{:.no_toc}

- Navigate to `http://localhost:3000`
- You should see a fully-implemented test page that you will use to test your backend.

- On the test page, click the "FETCH" button.
- After a few seconds, you should see the following at the bottom of the page:

- On the terminal where your server is running, you should see what the output of `console.log(rows)`:

### 5. Change and reload server
{:.no_toc}

Every time you change the code in `server.js`, you will have to kill and rerun your server process. Let's practice that here to make sure you understand your development workflow.

- Modify `server.js` in trivial ways:
  - Have it print a slightly different message after the server process is bound to port 3000.
  - Have it return `{ status: 'unimplemented!!!'}` in response to a GET request.

- Return to the terminal and stop the current node server by pressing `CTRL-C`
- Now rerun `npm start`
  - Verify the terminal prints you updated message

- Navigate to `http://localhost:3000` and click "Fetch"
  - Verify the result returned is updated.

## Using the `gsa-sheets` node module

To update the spreadsheet, you will be using the `gsa-sheets` Node library.

The starter code already creates a `Sheet` object for you:

```javascript
const sheet = googleSheets(key.client_email, key.private_key, SPREADSHEET_ID);
```

And the `onGet()` function calls and prints the results of the `sheet.getRows()` method:

```javascript
const result = await sheet.getRows();
const rows = result.rows;
console.log(rows);
```

Here are the public methods of a `Sheet` object:

Method name | Description
--- | ---
`getRows()` | Returns the rows in the spreadsheet. This is an asynchronous function that returns a `Promise` that resolves to a JSON object with one property, `rows`. The value of `rows` is an array of the spreadsheet's row values, also stored in an array. For example, if you have a spreadsheet that looks like this: [screenshot](images/hw5-sheet-data.png), the value of "result" in a call to `const result = await sheet.getRows()` will look like this: [screenshot](images/hw5-getrows-json.png) .
`appendRow(newRow)` |  Adds the given row to the end of the spreadsheet. This is an asynchronous function takes an Array parameter, `newRow`. The array contains the list of values in order to add to the end of the spreadsheet. For example, a call to `sheet.appendRow([1, 2, 3])` would add a row where the first value was 1, the second value was 2, and the third value was 3.

`appendRow` returns a `Promise` that resolves to a result object, which will equal `{ success: "true" }` if the operation was successful, or `{ error: <error message> }` if the operation failed.
`deleteRow(rowIndex)` | Deletes the given row in the spreadsheet. The `rowIndex` indicates the 0-based row number of the spreadsheet, where the first row is 0, the second row is 1, etc.

`deleteRow` returns a `Promise` that resolves to a result object, which will equal `{ success: "true" }` if the operation was successful, or `{ error: <error message> }` if the operation failed.
`setRow(rowIndex,newRow)` | Sets a particular row in the spreadsheet to the given values. This is an asynchronous function takes two parameters, `rowIndex` and `newRow`. The `rowIndex` indicates the 0-based row number of the spreadsheet, where the first row is 0, the second row is 1, etc. The `newRow` is an array of values in the order that they should be set.

`setRow` returns a `Promise` that resolves to a result object, which will equal `{ success: "true" }` if the operation was successful, or `{ error: <error message> }` if the operation failed.

**Bugs?**
- If you believe there is a bug in the `gsa-sheets` library, post to Piazza.

## [5/30] CLARIFICATION: Spreadsheet Columns

In the examples below, we use a spreadsheet with an "email" and a "name" column.

However, you **cannot** assume the spreadsheet has an "email" and a "name"; you must make it work with whatever column names are specified in the spreadsheet.

- You should always treat the first row of the spreadsheet as the names of the columns in the spreadsheet.
- You may assume that every spreadsheet will have at least one column specified, i.e. you do *not* have to support an empty spreadsheet

Here's an example of another valid spreadsheet:

Because of this late clarification, we are extending the deadline for HW5 for one day, but the late cut-off remains the same:
- Deadline: 5/31 at 11:59pm
- Late cutoff: 6/1 at 11:59pm

## Milestone 1: Implement GET

When you send a GET request to `http://localhost:3000/api`, the server should reply with a JSON representation of the spreadsheet as described below:
- Return an array of objects, where each object represents a row:
  - Each object should be key-value pairs of the form `column: value`

For example, if your spreadsheet that looks like this:

Then a GET request to `http://localhost:3000/api` should return JSON that looks like:

```json
[
  {
    "name": "Bert",
    "email": "bert@sesame.street"
  },
  {
    "name": "Ernie",
    "email": "ernie@sesame.street"
  },
  {
    "name": "Big bird",
    "email": "bigbird@sesame.street"
  }
]
```

**Spreadsheet Format:**

* You may assume the spreadsheet is **formatted perfectly**:
  - The first row of the spreadsheet contains the column names.
  - Every row with a value in it is filled out completely, i.e. there are no partially filled out rows. ([screenshot](images/hw5-invalid-partial-row.png))
  - All values belong to a named column ([screenshot](images/hw5-invalid-no-column.png))
  - There are no blank rows in between filled out rows. That is, it's not possible for row 5 and row 7 to be filled out, but row 6 to be blank. ([screenshot](images/hw5-invalid-skipped-row.png))

---

**Testing GET:**

Use the test page located at `http://localhost:3000/` to verify your result. Here's a screenshot of what the test page looked like after clicking the "Fetch" button:

---

## Milestone 2: Implement DELETE

When you send a DELETE to `http://localhost:3000/api/` with route parameters **`column-name/value`** your server will delete the first row whose column value matches the given parameter.
- In other words, a DELETE request to `http://localhost:3000/api/name/Anderson` would delete the first row whose "name" value was "Anderson."

**DELETE request details:**
- If there are multiple rows that match the given parameter, delete the first matching row.
- If there are no rows whose value matches the given parameter, you should still return a success response but the spreadsheet should not change.
- For simplicity, **you do not have to support case insensitivity**; that is extra credit. In other words, if your column name is "email", you do not have to make your DELETE request work with `api/Email/o@thegrouch.net`. Similarly, if a row value for "name" is "Anderson", you do not have to delete that row if the DELETE request is for `api/name/anderson`

**DELETE response:**

Your server should respond with a success message after updating the spreadsheet, or when your server determines spreadsheet should not be updated.

```json
{
  "response": "success"
}
```

---

**Testing DELETE:**

This example assumes your spreadsheet looks like this:

Use the test page located at `http://localhost:3000/` to verify your result:
- Set the API path to `/api/name/Ernie`
- Set the "Method" to `DELETE`

Here's a screenshot of what the test page looked like after clicking the "Fetch" button:

And here's a screenshot of the updated spreadsheet:

## Milestone 3: Implement POST

When you send a POST request to `http://localhost:3000/api` with a message body in the format described below, your server should append a row to the end of the spreadsheet.

**POST request details:**

- The message body will be a JavaScript object that represents the row to add to the spreadsheet.
- The JavaScript object contains key-value pairs of the form `column: value`
- For example, the message body might look like:
  ```json
  {
    "name": "Oscar",
    "email": "o@thegrouch.net"
  }
  ```
- The column-value pairs will **not necessarily** be defined in the same order as the columns in the spreadsheet. For example, another valid message body is the following:
  ```json
  {
    "email": "me@el.mo",
    "name": "Elmo"
  }
  ```
- You may, however, assume that the message body is **perfectly formatted**, i.e. the value for each column is filled out, and it does not specify any columns that don't already exist in the spreadsheet.
- For simplicity, you **do not** have to support case insensitivity; that is extra credit. In other words, if your column names are "name" and "email", you do not have to make your POST request work with `{ "Name": "Elmo", "Email": "me@el.mo" }`

**POST response:**

Your server should respond with a success message after updating the spreadsheet.

```json
{
  "response": "success"
}
```

---

**Testing POST:**

This example assumes your spreadsheet looks like this:

Use the test page located at `http://localhost:3000/` to verify your result:
- Make sure the API path is `/api`
- Set the "Method" to `POST`
- Click "Add" next to "Body data" twice and fill out these keys and values:
  - `name` : `Oscar`
  - `email` : `o@thegrouch.net`

Here's a screenshot of what the test page looked like after clicking the "Fetch" button:

And here's a screenshot of the updated spreadsheet:

## EXTRA CREDIT: Implement PATCH

When you send a PATCH request to `http://localhost:3000/api` with route parameters **`column-name/value`** **and** a message body in the format described below, your server will update the first row whose column value matches the given parameter, with the values as described in the message body.

**PATCH request details:**

- The message body will be a JavaScript object that represents the column values to update for the row.
- The JavaScript object contains key-value pairs of the form `column: value`
- For example, you might have a PATCH request `http://localhost:3000/api/name/Oscar` with a message body that looks like:
  ```json
  {
    "email": "me@osc.ar"
  }
  ```
- The JavaScript object will **not necessarily** contain every column in the spreadsheet.
- You may assume that the message body keys are valid, i.e. the object only refers to columns that exist in the spreadsheet.
- If there are multiple rows that match the given parameter, update the first matching row.
- If there are no rows whose value matches the given parameter, you should still return a success response but the spreadsheet should not change.
- For simplicity, you **do not** have to support case insensitivity; that is extra credit.

**PATCH response:**

Your server should respond with a success message after updating the spreadsheet.

```json
{
  "response": "success"
}
```

---

**Testing PATCH:**

This example assumes your spreadsheet looks like this:

Use the test page located at `http://localhost:3000/` to verify your result:
- Set the API path to `/api/name/Ernie`
- Set the "Method" to `PATCH`
- Click "Add" next to "Body data" twice and fill out these keys and values:
  - `email` : `me@ernie.com`

Here's a screenshot of what the test page looked like after clicking the "Fetch" button:

And here's a screenshot of the updated spreadsheet:

## EXTRA CREDIT: Case-insensitive search

For extra credit, make your server support case-insensitive search for:
- DELETE
- PATCH
- POST

The case insensitivity should be on the **column** name.

## Submit

Upload your completed homework to your GitHub repository. However, this time **you do not have to publish your page on GitHub**, as this is a server and not a client-side web page.

Instead, please follow the instructions below to deploy your app to [Heroku](http://heroku.com).

### Deploy to Heroku
{:.no_toc}

- Create a [free Heroku account](https://signup.heroku.com), if you don't have one already
- Once your account is created and verified, you can deploy your app by visiting the following link (of course, replace `<YOUR-REPOSITORY-NAME>` with the name of your repository, such as `hw5-sheets-mygithubname`):
  - `https://heroku.com/deploy?template=https://github.com/yayinternet/<YOUR-REPOSITORY-NAME>`
- When the page loads, click the purple "Deploy" button.
- When the deployment finishes, you should see "Your app was successfully deployed." Click the "View" button.
  - This will take you to your deployed app, which will look like `http://some-autogenerated-name.herokuapp.com`

**Trouble with deploying**
- If your deployment isn't working, feel free to post to Piazza or come to office hours.
- If you really can't get it working, turn in your homework anyway; we are not requiring you to deploy to Heroku. However, deploying your app to Heroku will greatly help our TAs when grading, so please try your best to get it working.

### Turn in homework
{:.no_toc}
Turn in the link to your GitHub repository and Heroku app here:
- [Submission Form](https://goo.gl/forms/LuTWdK9S3510x5ys1)

redpajama_set_name: RedPajamaGithub


text:
Business Reputation Management
Repair Business Reputation
Build Business Reputation
Are You Prepared For A Business Reputation Crisis?
Removing Content Online
Personal Reputation
Personal Reputation Management
Repair Personal Reputation
Build Personal Reputation
Are You In A Personal Reputation Crisis?
Removing Content From Google
Who Trusts Us
About Igniyte
Talk to an expert today 02035428686 Contact us
The Reputation Experts
Remove my name from Google: Can you really gag the Internet?
Author Igniyte
Filed to
If you experience a reputational crisis, you may find yourself asking "is it possible to remove my name from Google?". Instead of attempting to gag search engines such as Google, which can come back to bite you, it's best to focus on implementing an online reputation management strategy. This helps you to focus on improving your search results and reputation online.
Remove my name from Google
Current affairs outlet The Huffington Post reported that a world-famous British couple attempted to gag the press. A celebrity, referred to as "PJS," engaged in an extramarital affair with someone referred to as "AB". News of the affair reached the English press which intended to publish the details to the world.
In response, PJS and his equally famous partner, referred to as "YMA," launched a privacy injunction with the High Court. This was to prevent the press publishing details of the affair. The High Court turned down the privacy injunction. However, the couple then turned to the Court of Appeal, which originally granted it. This prevented the English press from naming the couple involved when talking about the affair.
Overturning the injunction
As such, newspapers in England and Wales were banned from naming this famous couple when reporting on this story. However, the Belfast Telegraph writes that this did not prevent US publications, as well as newspapers in countries such as Scotland and online news outlets, from reporting the names of the famous couple involved in this matter. As such, this information became widely available online, rendering the privacy injunction practically useless.
According to the BBC, the Sun on Sunday applied to the Court of Appeal to lift the injunction. The Sun on Sunday argued that since the allegations were widely reported abroad and online, the rationale used to grant the injunction was no longer relevant. Subsequently, the Court of Appeals lifted the injunction but left it in place temporarily. This gave PJS time to appeal this decision to the UK Supreme Court. In other words, the fact that news of PJS' affair leaked and spread online ensured that despite his decision to take legal action, it came to the attention of the world.
Reputation on Google
In this increasingly digitised world, the way you are perceived online matters. For instance, in Career Builder's 2015 Social Media Recruitment Study, 52% of employers say they screen job applicants via the web, rising from 39% in 2013. Meanwhile, 37% of employers questioned say they look at other people's posts about an applicant when screening potential employees online.
If you experience a negative reputational incident that generates press and social media content, it could rank on the first page of a Google search for your name. A study from Chitika shows that the first page of a Google search garners 92% of all traffic from an average search. Therefore, it is vital that the first page of a Google search for your name portrays you in a positive light. This is to ensure that you develop a positive professional reputation online.
Google removal policies
So what happens if you experience a negative reputational event? Is it possible to remove the details from a Google search for your name, to ensure it does not damage your professional reputation? You cannot control what other people type into search bars, so it's practically impossible to gag Google in most cases.
However, in some cases, it may be possible to remove information from Google. The search engine will remove sensitive personal details from Google search results, as long as the parameters of your request conform to Google's removal policies. Information Google may be willing to remove includes your name, bank account number, an image of your hand-written signature or a sexually explicit image or video of you that's been shared online without your consent.
It may also be possible to use 'Right to be Forgotten,' a 2014 ruling from the European Court of Justice, to have information removed from Google searches. If you complete a Right to be Forgotten application and say why the information you wish to have removed is outdated or irrelevant, Google may honour your request. The Guardian reports that out of 218,320 requests to remove links submitted between 29th May 2014 and 23rd March 2015, 46% have been successfully delisted on individual name searches.
Remove my name from Google or manage my reputation?
In other words, the grounds upon which you can have information removed from Google are narrow. If you experience a reputational crisis which generates unwanted content online, a more effective method would be to implement a comprehensive online reputation management strategy. Here, you focus on developing digital assets that rank on the first page of a Google search for your name. You then replace the unwanted content and portraying you in a positive light online.
In order to implement this strategy, focus on creating effective online profiles on social media. Make sure that you utilise suitable social media profiles, such as LinkedIn if you operate in the corporate world. With this, you can target the right audience. By doing this, you can create engaging content and post it on your social media profiles. This helps in presenting yourself as a thought leader in your field to the appropriate audience. As a result, this cultivates a positive reputation online.
It is also advisable to encourage the creation of positive content relating to your name and/or company. Here you might want to think about investing in PR. This will help your name feature in online reports from news sources. These outlets are seen as trusted sources of information by Google. Therefore these articles could potentially rank on the first page of a Google search for your name. Again, you are ensuring that you cultivate a positive professional image.
Develop your professional reputation
In the majority of cases, it can be hard or even impossible to gag Google. If unwanted content features in the rankings on the first page of a Google search for your name, cultivate and deploy an online reputation management strategy. By adopting this approach, you could ensure that positive content appears in Google searches for your name. This allows you to develop a positive professional reputation.
Previous Article Importance of reputation: Global rep track top 10 April 19, 2016 Next Article The Right to Be Forgotten: Two years on April 26, 2016
Igniyte Leeds
No1. Aire Street
LS1 4PR
Igniyte London
The Stanley Building
London N1C 4AG
Igniyte Limited is a reputation management company registered in England and Wales (company registration number 06830265) and with its registered office at No.1 Aire Street, Leeds, LS1 4PR. VAT Number: 970661016
© Igniyte 2020
Fields marked * are required
If your matter is complex, or highly confidential, please contact Simon in full confidence.
simon@igniyte.com
Please supply us with as much information as possible such as search terms used on Google and links to investigate.
I agree to the privacy notice.
By checking this box, you are allowing your information to be used in accordance with Igniyte Limited's Privacy Notice


text:
In honor of tomato month, we want to highlight produce vendor Angela Foret. She is the owner and operator of Sugartown Creations.
Angela has always had a lifestyle of homegrown produce. As a child, her family grew vegetables, which she still practices today. Fast forward, Angela became a substitute teacher during the school year. During the summer months she began distributing watermelon from three local farmers of Sugartown. She quickly saw the need within farmers markets and began to expand her efforts, name, and distribution of the popular watermelon she is known for.
Angela then expanded even further to offer her own homegrown produce from her 7 acre farm in the Judice area (Where she also has chickens, horses & cattle). She grows everything from lettuce, zucchini, tomatoes, peas, and everything in between. She is passionate about her produce offerings and it shows. Angela says "I love being outside and providing high-quality healthy produce items." Angela says that although she would like to grow organic, the many strict regulations are prohibitive. Instead, she strives for her produce to be as "clean" as possible. For example, she doesn't preventively spray, but only when there's a need. This July, she is harvesting heat tolerant produce including tomatoes, okra and purple hull peas.
You can catch Angela at Lagneaux Country Store from 3-6pm during watermelon season (the next week or so), on Facebook @stowncreations for updates. Be sure to visit her booth at our next Delcambre Seafood and Farmers Market on Saturday, August 7th from 9am-1pm.
Hold the Gravy Podcast!
Learn about the market, seafood, health and wellness, and other Cajun stories.
Listen to the market's podcast, Hold the Gravy, on Apple, Podbean, Google, Audible, and other podcast sites.
Delcambre Seafood & Farmers Market is a community project of the Twin Parish Port Commission with additional funding from the US Department of Agriculture.
COPYRIGHT © 2022. Delcambre Seafood & Farmers Market | Legal | Privacy Policy


text:
#include "treeitem.h"
#include "treemodel.h"

TreeModel::TreeModel(QObject *parent)
    : QAbstractItemModel(parent)
{
    rootItem = new TreeItem(Types::Root);
}

TreeModel::~TreeModel()
{
    delete rootItem;
}

int TreeModel::columnCount(const QModelIndex &parent) const
{
    if (parent.isValid())
        return static_cast<TreeItem*>(parent.internalPointer())->columnCount();
    else
        return rootItem->columnCount();
}

QVariant TreeModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();

    if (role != Qt::DisplayRole && role != Qt::UserRole)
        return QVariant();

    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());

    if (role == Qt::DisplayRole)
        return item->data(index.column());
    else
        return item->info();
}

Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const
{
    if (!index.isValid())
        return 0;

    return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}

QVariant TreeModel::headerData(int section, Qt::Orientation orientation,
    int role) const
{
    if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
        switch (section)
        {
        case 0:
            return tr("Name");
        case 1:
            return tr("Action");
        case 2:
            return tr("Type");
        case 3:
            return tr("Subtype");
        case 4:
            return tr("Text");
        }
    }

    return QVariant();
}

QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent)
const
{
    if (!hasIndex(row, column, parent))
        return QModelIndex();

    TreeItem *parentItem;

    if (!parent.isValid())
        parentItem = rootItem;
    else
        parentItem = static_cast<TreeItem*>(parent.internalPointer());

    TreeItem *childItem = parentItem->child(row);
    if (childItem)
        return createIndex(row, column, childItem);
    else
        return QModelIndex();
}

QModelIndex TreeModel::parent(const QModelIndex &index) const
{
    if (!index.isValid())
        return QModelIndex();

    TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
    if (childItem == rootItem)
        return QModelIndex();

    TreeItem *parentItem = childItem->parent();

    if (parentItem == rootItem)
        return QModelIndex();

    return createIndex(parentItem->row(), 0, parentItem);
}

int TreeModel::rowCount(const QModelIndex &parent) const
{
    TreeItem *parentItem;
    if (parent.column() > 0)
        return 0;

    if (!parent.isValid())
        parentItem = rootItem;
    else
        parentItem = static_cast<TreeItem*>(parent.internalPointer());

    return parentItem->childCount();
}

UINT8 TreeModel::type(const QModelIndex &index) const
{
    if (!index.isValid())
        return 0;
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->type();
}

UINT8 TreeModel::subtype(const QModelIndex &index) const
{
    if (!index.isValid())
        return 0;
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->subtype();
}

QByteArray TreeModel::header(const QModelIndex &index) const
{
    if (!index.isValid())
        return QByteArray();
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->header();
}

bool TreeModel::hasEmptyHeader(const QModelIndex &index) const
{
    if (!index.isValid())
        return true;
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->hasEmptyHeader();
}

QByteArray TreeModel::body(const QModelIndex &index) const
{
    if (!index.isValid())
        return QByteArray();
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->body();
}

bool TreeModel::hasEmptyBody(const QModelIndex &index) const
{
    if (!index.isValid())
        return true;
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->hasEmptyBody();
}

QString TreeModel::name(const QModelIndex &index) const
{
    if (!index.isValid())
        return QString();
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->name();
}

QString TreeModel::text(const QModelIndex &index) const
{
    if (!index.isValid())
        return QString();
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->text();
}

QString TreeModel::info(const QModelIndex &index) const
{
    if (!index.isValid())
        return QString();
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->info();
}

UINT8 TreeModel::action(const QModelIndex &index) const
{
    if (!index.isValid())
        return Actions::NoAction;
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->action();
}

UINT8 TreeModel::compression(const QModelIndex &index) const
{
    if (!index.isValid())
        return COMPRESSION_ALGORITHM_UNKNOWN;
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    return item->compression();
}

void TreeModel::setSubtype(const QModelIndex & index, const UINT8 subtype)
{
    if (!index.isValid())
        return;

    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    item->setSubtype(subtype);
    emit dataChanged(index, index);
}

void TreeModel::setName(const QModelIndex &index, const QString &data)
{
    if (!index.isValid())
        return;

    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    item->setName(data);
    emit dataChanged(index, index);
}

void TreeModel::setType(const QModelIndex &index, const UINT8 data)
{
    if (!index.isValid())
        return;

    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    item->setType(data);
    emit dataChanged(index, index);
}

void TreeModel::setText(const QModelIndex &index, const QString &data)
{
    if (!index.isValid())
        return;

    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    item->setText(data);
    emit dataChanged(index, index);
}

void TreeModel::setAction(const QModelIndex &index, const UINT8 action)
{
    if (!index.isValid())
        return;

    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    item->setAction(action);
    emit dataChanged(this->index(0, 0), index);
}

QModelIndex TreeModel::addItem(const UINT8 type, const UINT8 subtype, const UINT8 compression,
    const QString & name, const QString & text, const QString & info,
    const QByteArray & header, const QByteArray & body, const QModelIndex & parent, const UINT8 mode)
{
    TreeItem *item = 0;
    TreeItem *parentItem = 0;
    int parentColumn = 0;

    if (!parent.isValid())
        parentItem = rootItem;
    else
    {
        if (mode == CREATE_MODE_BEFORE || mode == CREATE_MODE_AFTER) {
            item = static_cast<TreeItem*>(parent.internalPointer());
            parentItem = item->parent();
            parentColumn = parent.parent().column();
        }
        else {
            parentItem = static_cast<TreeItem*>(parent.internalPointer());
            parentColumn = parent.column();
        }
    }

    TreeItem *newItem = new TreeItem(type, subtype, compression, name, text, info, header, body, parentItem);
    if (mode == CREATE_MODE_APPEND) {
        emit layoutAboutToBeChanged();
        parentItem->appendChild(newItem);
    }
    else if (mode == CREATE_MODE_PREPEND) {
        emit layoutAboutToBeChanged();
        parentItem->prependChild(newItem);
    }
    else if (mode == CREATE_MODE_BEFORE) {
        emit layoutAboutToBeChanged();
        parentItem->insertChildBefore(item, newItem);
    }
    else if (mode == CREATE_MODE_AFTER) {
        emit layoutAboutToBeChanged();
        parentItem->insertChildAfter(item, newItem);
    }
    else {
        delete newItem;
        return QModelIndex();
    }

    emit layoutChanged();

    return createIndex(newItem->row(), parentColumn, newItem);
}

QModelIndex TreeModel::findParentOfType(const QModelIndex& index, UINT8 type) const
{
    if (!index.isValid())
        return QModelIndex();

    TreeItem *item;
    QModelIndex parent = index;

    for (item = static_cast<TreeItem*>(parent.internalPointer());
        item != NULL && item != rootItem && item->type() != type;
        item = static_cast<TreeItem*>(parent.internalPointer()))
        parent = parent.parent();
    if (item != NULL && item != rootItem)
        return parent;

    return QModelIndex();
}


Vendors instruct us for our ability to sell properties at the highest possible figure for them.
Early preparation makes a difference! Reducing delay on your part means your sale can progress swiftly. Non performing buyers can be identified and discarded early on too. Before marketing your property get all your documentation together.
If you have a mortgage, make sure you know how much it will cost to redeem. You do not want to be taken by surprise after you have contracted to sell by finding you must pay several thousand pounds more than you thought for early redemption penalties or the like.
Get your solicitor ready early.
We recommend Frazer Coogans Solicitors - who have extensive experience of the local property market, but you can, of course, instruct who you want. Whoever it is, they must do several things before he can send out any sale documentation. This can take at least a fortnight or even three weeks, so the sooner you instruct a solicitor the sooner they can get those out of the way and start the process. Don't leave it until you have a buyer.
From December 1st 2008, the new law means that anyone selling a home needs to provide a Home Report to prospective buyers. This is a standard report on the condition and valuation of the home, its energy efficiency and other essential information. It is useful for both the seller and potential buyers, ensuring everyone is better informed. The Home Report is arranged by the seller and is carried out by a member of the Royal Institution of Chartered Surveyors.
From December 1 2008, homes put on the market in Scotland need a Home Report. There are exceptions, including new-build homes, right-to-buy homes and conversions of properties not previously occupied as a home.
For more information on Home information Pack click here.
It's amazing how many people don't. If limited storage space is a consideration, renting a storage unit nearby can be a pragmatic and cost effective solution.
To fit in with buyers' crowded schedules we show properties from early mornings until late into the evening. Give your property maximum exposure by allowing it to be shown to as many pre-qualified applicants as possible.
We've all done it. "This is the kitchen...", but buyers can find this unsettling. Leave your buyer and agent to view at their own pace, or even better, leave them to it completely.
Leave doors from hallways propped open. It adds to the feeling of space in a property.
Give your agent at Bruach keys to facilitate viewings at your property and help remove a hassle.
Water stains on the ceiling and damp or musty smells usually have a straightforward cause - and remedy. Repairing obvious defects before you market the property will make it a much better proposition for buyers.
Valuations should be based on fact, and backed up with comparables and intimate knowledge of local supply - and demand. Beware of agents deliberately over valuing your home to impress you (and secure their sole agency), then allowing it to stagnate on the market whilst they pester you to drop the price. Although lucrative for some agents, it's seldom in the interest of you the seller.
Everyone hates them, (even us, honest!) but a board outside your home generates more enquiries than no board. Bruach follows local authority and DTI recommendations on the erecting and sitting of agents' boards.


text:
Realtor For The People | James Brown
I FEEL GOOD!!!
info@realtorforthepeople.com
Link Showcase
Chula Vista Community
San Diego Community
National City Community
Paradise Hills Community
Spring Valley Community
La Mesa Community
Lemon Grove Community
Escondido Community
El Cajon Community
Oceanside Community
Murrieta Community
Temecula Community
Sold/Pending Listings
Property SearchSearch By Map
Listing By EmailListing Updates Sent To Your Inbox
Home ValuationWhat Is Your Home Worth?
My AccountLogin To Save Listings And Searches
RealtorForThe People » Communities » Chula Vista Community
About the Community of Chula Vista
Chula Vista is the second largest city in the San Diego metropolitan area, the seventh largest city in Southern California, the fourteenth largest city in the state of California, and the 76th-largest city in the United States. The population was 243,916 as of the 2010 census.
Located just 7.5 miles (12.1 km) from downtown San Diego and 7.5 miles (12.1 km) from the Mexican border in the South Bay region of the metropolitan area, the city is at the center of one of the richest economic and culturally diverse zones in the United States. Chula Vista is so named because of its scenic location between the San Diego Bay and coastal mountain foothills.
Founded in the early 19th century, fast population growth has recently been observed in the city. Located in the city is one of America's few year-round United States Olympic Training centers and popular tourist destinations include SleepTrain Amphitheatre, the Chula Vista marina, and the Living Coast Discovery Center, formerly known as the Chula Vista Nature Center.
The citizens of Chula Vista voted to incorporate on October 17, 1911. The State approved in November.
In 1916, the Hercules Powder Company opened a 30-acre bayfront site, now known as Gunpowder point, which produced substances used to make cordite, a gun propellant used extensively by the British Armed Forces during World War I. Although the Great Depression affected Chula Vista significantly, agriculture still provided considerable income for the residents. In 1931, the lemon orchards produced $1 million in revenue and the celery fields contributed $600,000.
The relocation of Rohr Aircraft Corporation to Chula Vista in early 1941, just months before the attack on Pearl Harbor, changed Chula Vista. The land never returned to being orchard groves again. The population of post-World War II Chula Vista tripled from 5,000 residents in 1940 to more than 16,000 in 1950. After the war, many of the factory workers and thousands of servicemen stayed in the area resulting in the huge growth in population. The last of the citrus groves and produce fields disappeared as Chula Vista became one of the largest communities in San Diego County. From 1960 to 2013, the South Bay Power Plant, a 700 megawatt four boiler plant, occupied 115 acres (47 ha) of the Chula Vista waterfront.
In 1944, the state of California attempted to seize land in Chula Vista owned by Kajiro Oyama, a legal Japanese resident who was then interned in Utah. Oyama was correctly charged with putting the property in his son Fred's name with the intent to evade the Alien Land Law because Fred was a native-born citizen. The case went to the U.S. Supreme Court as Oyama v. California where the court found that Kajiro's equal protection rights had been violated.
Olympic Training Center, Lower Otay Reservoir in the background
In January 1986, Chula Vista annexed the unincorporated community of Montgomery, which had previously rejected annexation in 1979 and 1982. At the time of the annexation the community was virtually surrounded by its larger neighbor.Over the next few decades, Chula Vista continued to expand eastward. Plans called for a variety of housing developments such as Eastlake, Rancho del Rey and Otay Ranch neighborhoods.In 1995, the United States Olympic Committee opened an Olympic Training Center in Eastlake on donated land; it is the USOC's first master-planned facility and is adjacent to Lower Otay Reservoir.
Camp Otay/Weber
Coat of Arms for the 140th Infantry Regiment
During World War I and II The army maintained a base on what is now the corner of Main Street and Albany Avenue. It initially served as a border post during World War I, and was reestablished in December 1942. It was home to the 140th Infantry Regiment, 35th Infantry Division. The regiment conducted war games against the Camp Lockett based 10th Cavalry, and were defeated. The base was closed in February 1944, and the division went on to see combat in the European theater. All traces of the post have since been removed.
In 2003, Chula Vista had 200,000 residents and was the second largest city in San Diego County.
Chula Vista is growing at a fast pace, with major developments taking place in the Otay Valley near the U.S. Olympic Training Center and Otay Lake Reservoir. Thousands of new homes have been built in the Otay Ranch, Lomas Verdes, Rancho Del Rey, Eastlake and Otay Mesa Areas. The South Bay Expressway, a toll-road extension of state route 125, opened November 19, 2007, connecting freeways 805 and 905 with State Route 54.
On May 30, 2006 officials from Chula Vista and the San Diego Chargers met to potentially discuss building a new stadium that would serve as the home for the team. Yet, in June 2009 the Chargers removed Chula Vista as a possible location for a new stadium. In 2009, Chula Vista – along with nine other second tier metropolitan area cities such as Hialeah and Southern California's Santa Ana – was ranked as one of the most boring cities in America by Forbes magazine; citing the large population but rare mentions of the city in national media. A current development plan in Chula Vista is to develop the bayfront.
All information about Chula Vista courtesy of Wikipedia.
James E. Brown, REALTOR®
SFR, VAPRO, Certified Military Relocation Specialist, Smart Home Advisor
Office: Godfather Of Sold
james@realtorforthepeople.com
realtorforthepeople.com
861 Anchorage Pl
REALTOR FOR THE PEOPLE
Coldwell Banker Royal Realty is licensed in the state of California
William- LaTawnya Belen 5 Star
He's is the greatest Realtor in the business...whether your in CA or transferring from CA he will help you find/sale your home. Only great things to say!!!
William- LaTawnya Belen
JessicaGrace Williams 5 Star
Excellent realtor! I highly recommend James Brown because your buying and selling process will FEEL GOOD! :)
JessicaGrace Williams
Karen Elizabeth Mitchell-Keels 5 Star
James is hardworking and honest and he will put his best foot forward and professionally guide you to homeownership! I love his down to earth, "no double talk " approach in helping those with less than perfect credit get into position to be able to buy. If you have not called him...do it today! Clear out any doubts on where you stand and how to get started! Thanks James!
Karen Elizabeth Mitchell-Keels
Carlos Tabor 5 Star
Great man honest and professional wouldn't think twice about using his services thanks for helping me
Carlos Tabor
Shelia Backus 5 Star
This young man is outgoing, a man of his word, a young man that have served our country and he still has a willing heart to serve the people to give us the comfort of a comfortable home to enjoy. My hat off to you. thank you Mr.James Brown
Steven Diesel 5 Star
The work ethic, professionalism, and character found in James Brown is unmatched! You will not find anyone out there who will work harder for you. James showed us well over 20 homes, and never once had anyone else's interests in mind but ours. We finally found the perfect house for us well after most realtors would have set us to the side or tried to just get us into anything. When you work with James Brown, you will not only be working with one of the best realtors in San Diego, but you will make a new life long friend. Realtor for the people is not just a slogan, it is an ethos, a mission statement. If you want your family to win, put James Brown in!
Steven Diesel
His Energy and CAN DO Spirit Motivated US
Let me first start of by saying "We feel good!" Good to be in our new home and we couldn't have done it without James. My wife and I probably looked at close to 30 homes until we found the right one. There were times when we didn't want to look anymore. James was patient and well organized during our quest. His energy and can do spirit motivated us to keep pushing. He worked around the clock and made sure our process moved smoothly. I can truly say that he is for the people and he will always have a place in our hearts. Thank you James for all of you hard work and dedication! Your phone will ring when it's time to sale!
Steven Exum Jr.
Great Real Estate Agent
James is a great real estate agent. He work with you to find the property that meets your requirements and fits your budget. He is honest and has your interest on his mind. I will highly recommend him.
Lina Luna
Kirby Johnson
James made buying a house so easy. He made myself and family very comfortable. The fact that he paid attention to all of the things I said made every house better than the last. I am positive if I ever need any work done on my new home James will be my first call because he has the best person to call on speed dial.
Karel Crater
©2015 Coldwell Banker Royal Realty. All Rights Reserved.


Apprenticeships are a vocationally based alternative to traditional academic education. Businesses require a skilled workforce to ensure competitiveness in the modern marketplace.
Apprenticeships offer a way for staff to gain a nationally recognised set of Knowledge, Skills and Behaviours particular to their role.
Apprenticeships are currently going through a transition from a structure referred to as a Framework to a new format called a Standard.
It is hoped that the transition to a total Standards based landscape for Apprenticeships will be complete by 2020.
Who sets the Apprenticeships Standards?
Groups of industry experts from employers in the sector form a team of Trailblazers. Each Standard has it's Trailblazer team that develop the Knowledge, Skills and Behaviour requirements for the roles within their industry.
What are the benefits of Apprenticeships for a Learner?
What are the benefits of Apprenticeships for an Employer?
This allows your employees to reach their full potential and maximise business productivity.