text:
Every child deserves magic. So why are children of colour so under-represented in sci-fi and fantasy?
December 28, 2021 admin_ond5qy8l
Photo by Terry Vine/Getty Images
There are few greater pleasures in life than opening a book and being transported to a different place. As a young black boy growing up in London I read many books where characters journeyed across magical landscapes or futuristic planets, but none focused on characters that looked like me. It was easy to feel completely locked out of these fictional worlds, and that can make it a struggle to imagine that a child like me could be at heart of one of these stories; that they could be a protagonist rather than simply an observer.
This is a phenomenon the writer Darren Chetty noted in 2013, reflecting on almost two decades teaching in English primary schools. He observed that "almost without exception, whenever children are asked to write a story in school, children of colour will write a story featuring white characters with 'traditional' English names". When fiction fails to represent them, children of colour can end up believing that they belong on the sidelines.
Stories belong to all of us, and every child should be able to see themselves in the books they read. This is what motivates me as a writer: I want my own stories to break down the barriers between other children and the imagined worlds I felt I could not fully access as a child. I want children who look like me to know they deserve to be the main character of any story.
I hope to publish sci-fi and fantasy fiction: I truly believe these are the stories that teach children to be ambitious, courageous and bold. They empower them to believe they are capable of anything they set their minds to. This is something all children deserve.
But I am faced with a publishing industry that has historically restricted the types of stories that writers of colour are able to tell. Certain genres are overwhelmingly white. When it comes to sci-fi and fantasy, black writers are far outnumbered by white ones. As the Centre for Literacy in Primary Education found, only 1 per cent of children's books published in 2017 had a character of colour as the lead – and many of the ones that did focused on social issues rather than fun and magic. Even established authors such as the former Children's Laureate Malorie Blackman have felt restricted in the types of stories that publishers will accept. In June 2020 she tweeted that she "once pitched a fantasy story about black magical siblings". However, "no publisher was interested as it 'wasn't believable'".
This is deeply damaging for young readers. If characters of colour are only allowed to exist in stories of "gritty realism", and aren't given the freedom to explore the endless possibilities that fiction offers, it will impact the way young children see themselves. If publishers fail to see the potential for all children to be magical heroes, then those children who are excluded will be denied the opportunity to see the limitless potential they have within themselves, too.
The stories I want to tell are not niche. There are many black writers like me who want to break out of the genres have typically been confined to – and there are many children who desperately need our stories. Every child deserves magic. It's up to the publishing industry to ensure they get it.
Mayo Agard-Olubo is supported by A Writing Chance, a UK-wide project from New Writing North designed to discover new writers from underrepresented backgrounds whose voices have historically not been heard in publishing and the media. You can read work by other writers in this initiative here.
A Writing Chance is co-funded by Michael Sheen and the Joseph Rowntree Foundation and supported by the New Statesman and the Daily Mirror. The project is delivered by New Writing North and literature organisations nationally, with research from Northumbria University.
Sign up for The New Statesman's newsletters
Tick the boxes of the newsletters you would like to receive.
Quick and essential guide to domestic and global politics from the New Statesman's politics team.
The New Statesman's weekly environment email on the politics, business and culture of the climate and nature crises – in your inbox every Thursday.
Job titleAdministration / OfficeArts and CultureBoard MemberBusiness / Corporate ServicesClient / Customer ServicesCommunicationsConstruction, Works, EngineeringEducation, Curriculum and TeachingEnvironment, Conservation and NRMFacility / Grounds Management and MaintenanceFinance ManagementHealth – Medical and Nursing ManagementHR, Training and Organisational DevelopmentInformation and Communications TechnologyInformation Services, Statistics, Records, ArchivesInfrastructure Management – Transport, UtilitiesLegal Officers and PractitionersLibrarians and Library ManagementManagementMarketingOH&S, Risk ManagementOperations ManagementPlanning, Policy, StrategyPrinting, Design, Publishing, WebProjects, Programs and AdvisorsProperty, Assets and Fleet ManagementPublic Relations and MediaPurchasing and ProcurementQuality ManagementScience and Technical Research and DevelopmentSecurity and Law EnforcementService DeliverySport and RecreationTravel, Accommodation, TourismWellbeing, Community / Social Services


text:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <title>Qt 4.8: QML FolderListModel Element</title>
  <link rel="stylesheet" type="text/css" href="style/style.css" />

  <link rel="stylesheet" type="text/css" href="style/superfish.css" />
  <link rel="stylesheet" type="text/css" href="style/narrow.css" />

      Home

    Qt Reference Documentation

Qt HOME

DEV

          DOC

BLOG

Qt 4.8

ALL VERSIONS

API Lookup

Class index

Function index

Modules

Namespaces

Global Declarations

QML elements

Qt Topics

Programming with Qt

Device UIs & Qt Quick

UI Design with Qt

Supported Platforms

Qt and Key Technologies

How-To's and Best Practices

Examples

Examples

Tutorials

Demos

QML Examples

          Search index:

          <form id="qtdocsearch" action="" onsubmit="return false;">
            <fieldset>
              <input type="text" name="searchstring" id="pageType" value="" />

 Close

All | API | Articles | Examples

 results:

            </fieldset>
          </form>

            API Lookup

Class index

Function index

Modules

Namespaces

Global Declarations

QML elements

            Qt Topics

Programming with Qt

Device UIs & Qt Quick

UI Design with Qt

Supported Platforms

Qt and Key Technologies

How-To's and Best Practices

            Examples

Examples

Tutorials

Demos

QML Examples

Home

QML Elements

QML FolderListModel Element

A

A

A

                Print

Contents

Properties

Methods

Detailed Description

Filtering

Example Usage

Path Separators

QML FolderListModel Element

The FolderListModel provides a model of the contents of a file system folder. More...

List of all members, including inherited members

Properties

count : int

folder : string

nameFilters : list<string>

parentFolder : url

showDirs : bool

showDotAndDotDot : bool

showOnlyReadable : bool

sortField : enumeration

sortReversed : bool

Methods

isFolder

Detailed Description

FolderListModel provides access to information about the contents of a folder in the local file system, exposing a list of files to views and other data components.

Note: This type is made available by importing the <tt>Qt.labs.folderlistmodel</tt> module. Elements in the Qt.labs module are not guaranteed to remain compatible in future versions.

import Qt.labs.folderlistmodel 1.0

The folder property specifies the folder to access. Information about the files and directories in the folder is supplied via the model's interface. Components access names and paths via the following roles:

fileName

filePath

Additionally a file entry can be differentiated from a folder entry via the isFolder() method.

Filtering

Various properties can be set to filter the number of files and directories exposed by the model.

The nameFilters property can be set to contain a list of wildcard filters that are applied to names of files and directories, causing only those that match the filters to be exposed.

Directories can be included or excluded using the showDirs property, and navigation directories can also be excluded by setting the showDotAndDotDot property to false.

It is sometimes useful to limit the files and directories exposed to those that the user can access. The showOnlyReadable property can be set to enable this feature.

Example Usage

The following example shows a FolderListModel being used to provide a list of QML files in a ListView:

 import QtQuick 1.0
 import Qt.labs.folderlistmodel 1.0

 ListView {
     width: 200; height: 400

     FolderListModel {
         id: folderModel
         nameFilters: ["*.qml"]
     }

     Component {
         id: fileDelegate
         Text { text: fileName }
     }

     model: folderModel
     delegate: fileDelegate
 }

Path Separators

Qt uses "/" as a universal directory separator in the same way that "/" is used as a path separator in URLs. If you always use "/" as a directory separator, Qt will translate your paths to conform to the underlying operating system.

See also QML Data Models.

Property Documentation

read-onlycount : int

Returns the number of items in the current folder that match the filter criteria.

folder : string

The folder property holds a URL for the folder that the model is currently providing.

The value is a URL expressed as a string, and must be a <tt>file</tt>: or <tt>qrc</tt>: URL, or a relative URL.

By default, the value is an invalid URL.

nameFilters : list<string>

The nameFilters property contains a list of file name filters. The filters may include the ? and * wildcards.

The example below filters on PNG and JPEG files:

 FolderListModel {
     nameFilters: [ "*.png", "*.jpg" ]
 }

Note: Directories are not excluded by filters.

read-onlyparentFolder : url

Returns the URL of the parent of of the current folder.

showDirs : bool

If true, directories are included in the model; otherwise only files are included.

By default, this property is true.

Note that the nameFilters are not applied to directories.

See also showDotAndDotDot.

showDotAndDotDot : bool

If true, the "." and ".." directories are included in the model; otherwise they are excluded.

By default, this property is false.

See also showDirs.

showOnlyReadable : bool

If true, only readable files and directories are shown; otherwise all files and directories are shown.

By default, this property is false.

See also showDirs.

sortField : enumeration

The sortField property contains field to use for sorting. sortField may be one of:

Unsorted - no sorting is applied. The order is system default.

Name - sort by filename

Time - sort by time modified

Size - sort by file size

Type - sort by file type (extension)

See also sortReversed.

sortReversed : bool

If set to true, reverses the sort order. The default is false.

See also sortField.

Method Documentation

bool FolderListModel::isFolder ( int index )

Returns true if the entry index is a folder; otherwise returns false.

      <acronym title="Copyright">©</acronym> 2013 Digia Plc and/or its
      subsidiaries. Documentation contributions included herein are the copyrights of
      their respective owners.

      The documentation provided herein is licensed under the terms of the
      GNU Free Documentation
      License version 1.3 as published by the Free Software Foundation.

      Documentation sources may be obtained from
      www.qt-project.org.

      Digia, Qt and their respective logos are trademarks of Digia Plc
      in Finland and/or other countries worldwide. All other trademarks are property
      of their respective owners. Privacy Policy

redpajama_set_name: RedPajamaGithub


There are several kinds of fractures that you could have on your windscreen. One of the most usual ones are Bull's eye, chip, mix break, crack chip, ding, side split, advance fracture, fifty percent moon, long fracture, partial bull's eye, pit, celebrity break, stress and anxiety cracks, and also stone break.
I understand these terms may be very unknown, so I have actually included some pictures to help you imagine the typical kinds. Call do not matter that much. You could repair virtually any kind of kind of split nowadays.
A few years earlier, the tools utilized for fixing windscreen just weren't made public. If you are a rather technical person, or have a passion for finding out brand-new things, you can most definitely use these devices with convenience.
If you have a small chip or crack on your windshield; do not postpone the repair. All lengthy splits start with these smaller sized ones. Over time, they just keep obtaining longer as well as longer up until the glass shatters entirely.
These smaller ones are extremely simple to fix and also cost simply 10-20 dollars. They are lots of high top quality windshield repair sets for small splits that you can purchase.
Establishing if you need windshield replacement or repair, windshield replacement expense and also navigating your insurance policy could include to the stress and anxiety of your scenario. The expense of windscreen repair work or replacement can be in between $10 as well as $470 for the ordinary automobile owner, yet lots of variables play a part in the rate.
Small chips and small splits in a lorry's windscreen could be eligible for windscreen repair work. Repairs are normally little troubles as well as not in the vehicle driver's direct line of sight. If you are unsure if a windshield replacement or repair service is required, a qualified technician at your local car repair shop can figure out if only repair is required.
Some people might not understand that windscreen repair service price is usually totally covered by their insurance. Numerous auto insurance provider cover windshield repair works in full, without any deductible, to avoid expensive replacements.


When I bought this I was hoping to get it upgraded to the bare minimums until I got the WOA board. I'm afraid to try and adjust the offset. I'm sure those 45 year old open frame pots are not very trust worthy. I've read about possible catastrophic meltdowns trying to adjust offset using ancient pots.
The speaker protect boards will be here in a week or so. Maybe I'll have to move up the WOA control board purchase.
I was able to get p/n's from the pots. Each channel has (2) X201R254B or 250K Ohm 1/5 W 20% 1 Turn and (1) X201R502B 5K Ohm 1/4W 20% 1 Turn. Neither of these are on the schematic for the PL400C in the service manual which, as I understand it, is the board I have. I think this circuit board possibly predates the service manual that I have.
It will save speakers though ( ask me how I know) . The more you talk about this amp the more I would like to see you restore back to factory ! Seems like you have such an early model that it would most definitely be considered a collectors item, at least by some of us. My 700 is very early production. I want to get back on it as soon as I can and it will be a stocker . Nothing against WOPL. Those pots you seek should be in stock at Digikey . I did get and end of life notice from them not too long ago so be aware of that.
I'll be installing the WOA control board. I really want this to be a solid daily driver. Based what @oldphaser said, the sn is from the 4th month of production. So maybe it was one of the first 500 made. I have no idea how many per month they were making so maybe just the first 1000. Not sure how valuable that would make it. I want to deal with the high offset but I'm not sure which pot does what. I don't want to blow up any of the stock output xsistors so I'm just going to ditch the PL400C.
When I install the WOA board, I'll be happy to donate my PL400C to the Phase Linear 400 museum of natural history .
Was there a hand written sticker on one of your filter caps? There was on my 4 fin....it said "Sue"
No sticker just a J in sharpie on one of the big caps.
I was looking at the release notes for the WOA PL14 REV E. They seem to say that one must switch to MJ21196 to maintain a SOA. I found that SOA means "safe operating area"?? Will it be OK to keep the PL909 if you're not playing it at concert levels? I understand they are 45 year old transistors.
The 96's are a dedicated audio part. Less noise, better distortion specs. .
Running all matched number 909's in mine until it smokes. Then I will do something different..."The torture never stops" Quote , Blackie Lawless, WASP.
Yes you can run the old PL909s. They are just not very robust compared to what is available today, even when they were new.
I'll probably press my luck with the PL909 and hope for no whammies.
Can you use the MJ21196 for the drivers as well ? And where can the be bought for 36.00 Lee ? I dont mean to be carrying on here too much but for that matter I wonder where you can even buy them at all .
You probably meant $63 (12 x $5.25) for a 96 and a silpad from WOA. I might just bit the bullet and make sure there's no whammies. Throw another log on the fire!
Crap, I forgot all about seeing if Joe may have them ! I did look on Digikey site. (Mouser says call for a quote, none in stock) Digikey has the MJ21196GOS-ND by ON semi in stock it seems. I guess this the same or close enough ?
You'd probably look for a MJ21196G. I believe the G means RoHS compliant.


Campus Projects @ Town Meeting: The School Building Committee (SBC) and Community Center committee (PPDC) will jointly update residents about the status of the two projects, and the milestones between now and the June 9th Special Town Meeting. If you've been following the process why attend?
We are at a crossroads of two projects that are being developed by two hard-working committees. The projects require us all to weigh very complex, and sometimes contradictory, issues. The decisions we make are important to the fabric of our community and will, of course, impact our taxes. What will give us the best value for our investment?
Both committees need residents to weigh in and to help them see the path forward!
There will be hundreds of people at Town Meeting – this is a vital opportunity for us to listen to each other and understand the decisions we will be making in June. Both committees will be asking for feedback.
Sustainability Presentation: On March 12th, architect Bill Maclay, who specializes in sustainable and "net-zero" architecture, presented a sustainability analysis of 5 school concepts. He outlined the likely energy efficiency of each concept, and the viability and cost of making the school a "net-zero" building. To see the slide deck he presented, click this link; and you can watch his entire presentation here.
Campus Projects FAQ's: New information has been added to the "Campus Projects Briefing Document." Please visit the Project FAQ's page to take a look.
RESCHEDULED for April 10th: Community Workshops! The joint SBC/PPDC Community Workshops that were snowed out on March 13th will be held on April 10th, 8:00am and 7:00pm. This is a crucial milestone, as community feedback will help shape the June Special Town Meeting. Please attend!
Before Town Meeting you'll get links to the current school concepts under consideration, and to other handouts that will be provided at Town Meeting.


text:
What to eat for a good functioning digestive system
For one to lead a healthy life, the functioning of the digestive system is central, which calls for ideal dieting habits.
Published : March 27, 2017
For one to lead a healthy life, the functioning of the digestive system is central, which calls for ideal dieting habits. There are various foods that can improve the health of the digestive system, just like there are others which cause gastrointestinal tract problems. There are also some food habits that lead to complications associated with the gastrointestinal tract, according to Private Kamanzi, a nutritionist and dietician at Amazon Complimentary Therapy in Remera, Kigali.
Habits to embrace
Joseph Uwiragiye, the head of nutrition department at University Teaching Hospital of Kigali (CHUK), says there are foods that when eaten can bring about digestion problems, which might result into bad breath. He says processed meals is one of them.
He, however, advises that a diet rich in plant-based foods is essential as it boosts proper digestion. Wheat, apples, yogurt and water are essential for improving digestion too, adds Uwiragiye.
"Foods that can improve the digestion process are of different types. Those rich in fiber, for example, are highly recommended. This is because they boost the digestion process as they increase absorption in the small intestines," he says.
Uwiragiye says examples of foods with high content of fiber include vegetables, fruits, whole grains and cereals.
He says that staying away from alcoholic beverages, sugar, soft drinks and tobacco keeps bad breath at bay.
"The preparation of these foods also matters. This is because, if wrongly prepared, it affects the fiber composition in such vegetables," says Kamanzi.
He says, in general, maintaining the hygiene of the utensils, places where food is prepared as well as that of the people preparing the food is important as it prevents infections of the stomach.
Kamanzi says it is also best to consume food with the right temperature, noting that it should be warm, but not too hot.
Uwiragiye says that normal flora is a type of bacteria that are harmless and good for the gastrointestinal tract.
"They also help in ingesting and digesting other bacteria. They are mostly found in the gut, and one can get them from yogurt," he says.
Kamanzi explains that vegetables with water soluble vitamins are best prepared in fats without mixing with water to prevent the evaporation of vitamins that are essential in digestion and good health in general.
"Another way to prepare them is by not pouring the oil on the sauce pan first, but rather starting with spices depending on one's preferences. The oil can be added on top of the vegetable later," he says.
The logic behind this, Kamanzi says, is to prevent the change of the chemical formula for the oil.
"When oil is put on the pan first, its form changes, which can further lead to complications in digestion when consumed," he says.
Kamanzi also cautions that much as fruits are recommended, it is a bad habit to mix different types of fruits to be taken at the same time. Taking one or two types of fruits a day, and doing the same the following day with different types is ideal.
"There are some fruits that have citric acid which will affect the stomach leading to problems of digestion," he says.
Eric Musengimana, a nutritionist working with Rwanda Diabetic Association, says another unhealthy habit that could bring about digestion problems is drinking either water, juice or any soft drink while eating.
"When eating, food is in solid form, and when passing in the gastrointestinal tract from the mouth through the esophagus to the stomach wall, there are some chemicals that are secreted. Those acids and enzymes become less effective when they have to work on liquids and solid food co-currently," he says.
Musengimana explains that drinking while eating leads to confusion in the secretion of the chemicals that aid in digestion, thus problems in digestive process.
He also points out that going to sleep immediately after eating is not recommended as it can negatively affect the small and large intestines, as well as the stomach.
"One-hour-and-a-half after eating is the ideal time before going to bed. Food hygiene should also be a priority if one wants to have a healthy digestive system," he says.
Uwiragiye says there are some foods that contain some bacteria such as escherichia coli, which when ingested, can lead to problems in the gastrointestinal tract and in other areas.
"The bacteria are also capable of causing food-borne diseases and ulcers, leading to diarrhea, vomiting and urinary tract infections," he says.
Kamanzi, however, notes that another important habit which is more common is mixing cold and hot food while eating.
"This affects the gastrointestinal tract, thus poor digestion. It also leads to confusion in the secretion of enzymes and other chemicals like hydrochloric acid in the stomach which results in indigestion," he says.

redpajama_set_name: RedPajamaCommonCrawl


We recently wrote about the new Chase Iberia Plus card. That comes with a sign-up bonus of up to 75,000 Iberia Avios points after meeting tiered minimum spending requirements!
In addition to its big welcome bonus, there's one perk that definitely stands out: the $1,000 discount voucher to use towards 2 tickets on the same flight after spending $30,000 on purchases in a calendar year.
Iberia Avios Points Can Be Great for a Trip to Europe Because Iberia's Hub Is Located In the Magical City of Madrid!
That's an excellent question, Shana!
Let's dig a little deeper into how this great perk works.
To earn the voucher from the Chase Iberia Plus card, you must make at least $30,000 in purchases within a single CALENDAR YEAR.
This means the purchasing period is from January 1 to December 31 each year. So if you sign up for the card in September or November, you will only have from that time until December 31 of that year to hit the $30,000 purchase requirement.
Every January 1 your spending total resets, and you begin working again towards the purchase requirement. All purchases must clear (not be pending) by December 31 to be eligible towards the total. Chase does NOT count money spent towards annual fees, interest, disputed charges, or cash advances towards this total.
Also, folks are only eligible for 1 voucher per calendar year. So, for example, spending $60,000 in a single calendar year will NOT earn you an additional voucher.
What Restrictions Does the Voucher Have?
There's always a catch, right? Sure, there are restrictions. But this perk could be incredibly valuable if you can maximize it!
As you can see, this voucher opens up a tremendous opportunity to get Big Travel with Small Money! Essentially, it's like a $1,000 off coupon for any 2 tickets on an Iberia flight.
Saving $1,000 on 2 Tickets Is No Small Potatoes!
For example, if you find 2 tickets for ~$500 each, then you would be able to fly nearly free using this voucher. Because you'd only pay the taxes and fees for the tickets. The voucher simply deducts $1,000 from the base price (excluding taxes and fees) of the seats.
Additionally, the voucher is valid for any class, making this a great way to get yourself an affordable upgrade to Business or First Class on your next trip!
How Do You Redeem the Voucher?
Once you meet the $30,000 spending requirement it will take 4 to 6 weeks from the end of that billing period to get the voucher.
The voucher will be sent via email from Iberia (NOT from Chase) congratulating you and providing a one-time use code that can be redeemed online.
The voucher expires 12 months after its date of issue. So be sure to use it within a year of receiving it!
To redeem the voucher, go to iberia.com/Chase10 and search for the flights you want.
Go to Iberia.com/Chase10 to Redeem Your Voucher. Or to Save 10% Off Any Flights Purchased With Your Chase Iberia Plus Card!
Once you find the flights you're looking for, select them and click the "Continue" button on the bottom of the page.
The next page will summarize your flight selection. Just below the summary, you'll see the title "Save on your trip." From there, select the "I have a promotional code" tab on the right to reveal the discount code box.
You'll then see a box where you can enter your discount code. I recommend copying it from the email and pasting it into this box to make sure it is entered correctly.
Click "Check Code," and your $1,000 discount will be applied.
You can finish your purchase like usual now, saving $1,000 off your trip!
If you have any problems using the code, you need to call Iberia at 1-800-772-4642. Because Chase can't assist with any issues involving the voucher.
With the new Chase Iberia Plus card you can earn up to 75,000 Iberia Avios points after meeting tiered spending requirements. Plus get other other perks, like a $1,000 voucher to use towards 2 tickets on the same flight after spending $30,000 on purchases in a calendar year.
Just remember, you have 1 full calendar year to meet the spending requirement to earn the voucher. After doing so, you'll receive the voucher code via email from Iberia. Redeeming the voucher is as simple as entering the code into the discount code field at checkout.
You can read our full review of the Chase Iberia Plus card here.
Emily and I don't earn a commission for this card. But we'll always let you know about any great way to get Big Travel with Small Money!
The expiration date is one year. Does that mean you have to travel by that year or can you book by the end of the year to travel later?
Looks like Iberia/com/Chase10 only allows to use an inboard airport from US, thats a very down side, I was thinking in going from another country to Europe to use the coupon , also I was comparing rates to see if apply the 10% off and I don't see any difference with the regular Iberia.com , do the 10% apply as a refund in the credit card ?
Does it allow stop overs? like flying to Morocco or any other Iberia's destination with a 1-week or more stop in Madrid, or even better, continuing from Barcelona ?
The stopover rules should be the same as for paid flights with Iberia because the voucher is a discount of a cash ticket not an award redemption.


This Chevy replacement spindle washer has been manufactured to meet or exceed factory specifications and performance. You will find the fit and function will work perfectly for your Chevy. You will also be pleased to know that Eckler's has sourced this spindle washer among other possible parts as the best choice for your repair or restoration project.


This was a recent topic on the DB2-L mailing list so I thought I'd weigh in with my two cents worth on the topic.
As with most DB2 (and, indeed, IT) issues, the correct answer is "it depends!" Let's dig a bit deeper to explain what I mean.
From a maintainability perspective, BETWEEN is probably better. The BETWEEN predicate is easier to understand and code than the equivalent combination of the less than or equal to predicate (<=) and the greater than or equal to predicate (>=). In past releases, in many cases it was more efficient, too. But today the Optimizer recognizes the two formulations as equivalent and there usually is no performance benefit one way or the other. Performance reasons aside, one BETWEEN predicate is easier to understand and maintain than multiple <= and >= predicates. For this reason, I tend to favor using BETWEEN.
The reason for this exception is that a BETWEEN formulation comparing a host variable to two columns is a Stage 2 predicate, whereas the preferred formulation is Stage 1. And we all know that Stage 1 outperforms Stage 2, right?
Or we could code MIDINIT BETWEEN 'H' AND 'Z' in place of MIDINIT >= 'H'. Of course, for either of these solutions to work correctly we would need to know that MIDINIT never contained values that collate lower than the value 'A'.
So, as usual, there is no one size fits all answer to the question!
Database performance problems are not caused by magic. Indeed, all performance problems are always caused by change. That statement flies in the face of what I normally say, which is "Almost never say always or never"… but in this case, it is true.
Think about it for a moment. If everything remains stable and unchanging in your environment, then why would performance vary? That's right, it wouldn't.
Something tangible must change before a performance problem can be experienced. The challenge of performance tuning is to find the source of the change, gauge its impact, and formulate a solution.
Physical changes to the environment, such as a new CPU, new disk devices, or different tape drives.
Changes to system software, such as a new release of a product (for example, WebSphere, CICS, or even z/OS), the alteration of a product (for example, the addition of more or fewer CICS regions or an IMS SYSGEN), or a new product (for example, implementation of DFHSM). Also included is the installation of a new release or version of DB2, which can result in changes in access paths as well as utilization of new features.
Changes to the DB2 engine from maintenance releases and PTFs, which can change the optimizer (and sometimes introduce other new functionality).
Changes in system capacity. More or fewer jobs could be executing concurrently when the performance problem occurs. Or additional users may be banging away at your transactions.
Environmental changes, such as the implementation of client/server programs, the adoption of SOA, or other new technologies.
Database changes. This involves changes to any DB2 object, and ranges from adding a new column or an index to dropping and re-creating an object.
Changes to the application development methodology, such as usage of check constraints instead of application logic or the use of stored procedures.
Changes to application code, both SQL and host language code (COBOL, C, Java, etc.).
Although the majority of your performance problems are likely to be application-oriented, you must be prepared to explore any and all of these other areas when application tuning has little effect.
My advice is to be sure that you institute strict change control tracking across all areas of your IT infrastructure. That way, whenever you experience a performance problem, you will be able to track what has changed recently, along with who changed it and why. This is important because every DBA knows what the answer to the question "What changed?" will be… right?
And that cannot be true. Oh, it does not mean that the person answering is lying. He or she may not have changed anything. And it is not necessarily reasonable to expect an application developer to know what all could have changed…especially when what can impact DB2 performance spans so many areas of the IT infrastructure.
So do yourself… and your company a favor: be sure that you meticulously track each and every change to any aspect of your systems. Then – and this is where many shops break down – make sure that you have methods of tying all of the change information together in such a way that it can be queried and examined in the face of a performance problem.
Only then can you reasonably expect your DBAs rapidly to be able to track down and remedy DB2 performance problems… because only then will they have the pertinent information at their disposal.
Reading Things That Aren't There... and Missing Things That Are!
You can shoot yourself in the foot using DB2 if you are not careful. There are options that you can specify that may cause you to read data that is not really in the database. And, alternately, you can set things up so that you miss reading data that is actually in the database.
How, you might be asking? Well, dirty reads will take care of the first one. Specifying ISOLATION(UR) implements read-through locks, which is sometimes referred to as a dirty read. It applies to read operations only. With this isolation level data may be read that never actually exists in the database, because the transaction can read data that has been changed by another process but is not yet committed.
Read uncommitted isolation provides the highest level availability and concurrency of the isolation levels, but the worst degree of data integrity. It should be used only when data integrity problems can be tolerated. Certain types of applications, such as those using analytical queries, estimates, and averages are likely candidates for read uncommitted locking. A dirty read can cause duplicate rows to be returned where none exist or no rows may be returned when one (or more) actually exists. When choosing read uncommitted isolation the programmer and DBA must ensure that these types of problems are acceptable for the application.
OK, so what about not reading data that is in the database? DB2 V9 provides us an option to do just that. In DB2 9 it is possible for a transaction to skip over rows that are locked. This can be accomplished by means of the SKIP LOCKED DATA option within your SQL statement(s). SKIP LOCKED DATA can be specified in SELECT, SELECT INTO, and PREPARE, as well as searched UPDATE and DELETE statements. You can also use the SKIP LOCKED DATA option with the UNLOAD utility.
When you tell DB2 to skip locked data then that data is not accessed and your program will not have it available. DB2 just skip over any locked data instead of waiting for it to be unlocked. The benefit, of course, is improved performance because you will not incur any lock wait time. But it comes at the cost of not accessing the locked data at all. This means that you should only utilize this clause when your program can tolerate skipping over some data.
The SKIP LOCKED DATA option is compatible with cursor stability (CS) isolation and read stability (RS) isolation. But it cannot be used with uncommitted read (UR) or repeatable read (RR) isolation levels. DB2 will simply ignore the SKIP LOCKED DATA clause under UR and RR isolation levels.
Additionally, SKIP LOCKED DATA works only with row locks and page locks. That means that SKIP LOCKED DATA does not apply to table, partition, LOB, XML, or table space locks. And the bigger the lock size, the more data that will be skipped when a lock is encountered. With row locking you will be skipping over locked rows, but with page locking you will be skipping over all the rows on the locked page.
Use both of these features with extreme care and make sure that you know exactly what you are telling DB2 to do. Otherwise, you might be reading more... or less than you want!
When a UNION is required to put together data from multiple queries, you might be able to use a CASE statement instead. This is very useful, particularly when the data for each of the queries in the UNION come from the same table. The CASE statement can potentially enhance performance by minimizing the number of times the data is read.
This simple SQL statement uses UNION to put together the results of three queries against the SYSTABLES table. The report shows all of the DB2 table-like objects that exist in the DB2 subsystem: tables, views, and synonyms.
This new query will need to scan SYSTABLES only once. The CASE statement will translate the code in the TYPE column into the text that we desire.
CASE statements are very powerful and you should use them when you can to create elegant and optimal SQL in your DB2 applications.
BIND/REBIND process determines exactly how your DB2 data is accessed, it is important that you develop an appropriate strategy for when and how to REBIND your programs.
There are several common REBIND approaches taken by DB2 users. By far, the best approach is to REBIND your applications over time as your data and systems change. This approach involves some form of regular maintenance that keeps DB2 statistics up to date and formulates new access paths as data volumes and patterns change.
Other approaches include REBINDing only when a new version of DB2 is installed, or perhaps more ambitious, whenever new PTFs are applied to DB2. Another approach is to REBIND automatically after a regular period of time (days, weeks, months, etc.). This approach can work if the period of time is wisely chosen based on the application data – but it still can pose administrative issues.
The final approach can be summarized as "if it ain't broke don't fix it!" This is the worst of the several approaches discussed here. The biggest problem with this approach is that you are penalizing every program in your subsystem for fear that a program or two may have a degraded access path. This results in potentially many programs having sub-optimal performance because the optimizer never gets a chance to create better access paths as the data changes.
Of course, the possibility of degraded performance is real – and that is why this approach has been adopted at some sites. The problem is being able to find which statements have degraded. In an ideal world we would be to be able to review the access path changes beforehand to determine if they are better or worse. But DB2 itself does not provide any systematic method of administering access paths that way. There are third party tools that can help you achieve this though.
Regularly reorganize the data to ensure that it is optimally structured.
Follow that with RUNSTATS to be sure that the reorganized state of the data is reflected in the DB2 Catalog.
And follow that with a REBIND for all the application programs that access the data structures impacted by the REORG and RUNSTATS.
At any rate, your goal should be to keep your access paths up-to-date with the current state of your data. Failing to do this means that DB2 is accessing data based upon false assumptions. DB2 is unlikely to make the same access path choice as your data grows – and as patterns within the data change.
By REBINDing you can generally improve the overall performance of your applications because the access paths will be better designed based on an accurate view of the data. Additionally, as DB2 changes are introduced (PTFs, new version/release) optimizer improvements and new access techniques can be incorporated into the access paths. That is, if you never REBIND, not only are you forgoing better access paths due to data changes but you are also forgoing better access paths due to changes to DB2 itself.
Now it is true that some folks don't rely on statistics to schedule a REORG. Instead, they just build the JCL to REORG their database objects when they create the object. So they create a table space then build the REORG job and schedule it to run monthly, or quarterly, or on some regular basis. This is better than no REORG at all, but it is probably not the best approach because you are most likely either reorganizing too soon (in which case you waste the CPU cycles to do the REORG) or you are reorganizing too late (in which case performance is suffering for a period of time before the REORG runs). Better to base your REORGs off of statistics and thresholds using either RUNSTATS or RTS.
Without accurate statistics there is little hope that the optimizer will formulate the best access path to retrieve your data. If the optimizer doesn't have accurate information on the size, organization, and particulars of your data then it will be creating access paths based on either default or inaccurate statistics. Incorrect statistics will cause bad choices to be made – such as choosing a merge-scan join when a nested loop join would be better, or failure to invoke sequential prefetch, or using the wrong index – or no index at all. And the problem of inaccurate statistics is pervasive.
There are shops out there that never, or rarely, run RUNSTATS to gather up-to-date statistics. Make sure yours is not one of those shops!
When should you run RUNSTATS? One answer is "As frequently as possible based on how often your data changes." To do this you will need to know a thing or two about your data growth patterns: what is its make-up, how is it used, how fast does it grow, and how often does it change? These patterns will differ for every table space in your system.
Next we need to decide when to REBIND? The best answer for this is when statistics have changed significantly enough to change access paths. When we know that data has significantly changed it makes sense to REBIND after the RUNSTATS completes. But the trick is determining exactly when we have a "significant" change in our data. Without an automated method of comparing and contrasting statistics (or even better yet, access paths) coming up with an answer in a manual way can be time-consuming and error-prone – especially if we have thousands of DB2 programs to manage.
As we REBIND, we always must be on alert for rogue access paths. A rogue access path is created when the optimizer formulates a new access path that performs worse than the previous access path. This can happen for a variety of reasons. Of course, number one is that the optimizer, though good, is not perfect. So mistakes can happen. Other factors can cause degraded access paths, too. The access paths for volatile tables depend on when you run the RUNSTATS. Volatile tables are those that start out empty, get rows added to them during processing, and are emptied out at the end of the day. And, of course, if the catalog or statistics are not accurate we can get problems, too.
Start RTS (or a RUNSTATS) to determine when to REORG.
Follow that with the REBINDs.
Then we need that fifth R – which is to Review the access paths generated by the REBIND.
The review is of utmost importance because the optimizer can make mistakes. And, of course, so can you. But your users will not call you when performance is better (or the same). They only ring you up when performance gets worse. As such, proactive shops will put best practices in place to test REBIND results comparing the before and after impact of the optimizer's choices.
The isolation level determines the mode of page or row locking implemented by the program as it runs.
DB2 supports a variation of the standard isolation levels. DB2 implements page and row locking at the program execution level, which means that all page or row locks are acquired as needed during the program run. Page and row locks are released as the program run depending on the isolation level.
Using the ISOLATION parameter of the BIND command you can set the isolation level of a package or plan. You also can use the WITH parameter on a SELECT statement to set the isolation level of a single SQL statement.
Cursor stability is the DB2 implementation of the SQL standard read committed isolation level. CS is perhaps the most common DB2 isolation level in use in production applications because it offers a good tradeoff between data integrity and concurrency. When CS is specified the transaction will never read data that is not yet committed; only committed data can be read.
A higher level of integrity is provided with repeatable read. Under an RR isolation level all page locks are held until they are released by a COMMIT (or ROLLBACK), whereas with CS read-only page locks are released as soon as another page is accessed. Repeatable read is the default isolation level if none is specified at BIND time.
An RR page locking strategy is useful when an application program requires consistency in rows that may be accessed twice in one execution of the program, or when an application program requires data integrity that cannot be achieved with CS.
For example of a good reason to use RR page locking, consider a reporting program that scans a table to produce a detail report, and then scans it again to produce a summarized managerial report. If the program is bound using CS, the results of the first report might not match the results of the second.
Suppose that you are reporting the estimated completion dates for project activities. The first report lists every project and the estimated completion date. The second, managerial report lists only the projects with a completion date greater than one year.
The first report indicates that two activities are scheduled for more than one year. After the first report but before the second, however, an update occurs. A manager realizes that she underestimated the resources required for a project. She invokes a transaction to change the estimated completion date of one of her project's activities from 8 months to 14 months. The second report is produced by the same program, but reports 3 activities.
If the program used an RR isolation level rather than CS, an UPDATE that occurs after the production of the first report but before the second would not have been allowed. The program would have maintained the locks it held from the generation of the first report and the updater would be locked out until the locks were released.
How about another example? Consider a program that is looking for pertinent information about employees in the information center and software support departments who make more than $30,000 in base salary. In the DB2 sample tables department 'C01' is the information center and department 'E21' is software support.
The program then begins to FETCH employee rows. Assume further, as would probably be the case, that the statement uses the XEMP2 index on the WORKDEPT column. An update program that implements employee modifications is running concurrently. The program handles transfers by moving employees from one department to another, and implements raises by increasing the salary.
Assume that Sally Kwan, one of your employees, has just been transferred from the information center to software support. Assume further that another information center employee, Heather Nicholls, received a 10 percent raise. The update program running concurrently with the report program implements both of these modifications.
If the report program were bound with an isolation level of CS, the second program could move Sally from 'C01' to 'E21' after she was reported to be in department 'C01' but before the entire report was finished. Thus, she could be reported twice: once as an information center employee and again as a software support employee. Although this circumstance is rare, it can happen with programs that use cursor stability. If the program were bound instead with RR, this problem could not happen. The update program probably would not be allowed to run concurrently with a reporting program, however, because it would experience too many locking problems.
Now consider Heather's dilemma. The raise increases her salary 10 percent, from $28,420 to $31,262. Her salary now fits the parameters specified in the WHERE condition of the SQL statement. Will she be reported? It depends on whether the update occurs before or after the row has been retrieved by the index scan, which is clearly a tenuous situation. Once again, RR avoids this problem.
You might be wondering, "If CS has the potential to cause so many problems, why is it used so ubiquitously? Why not trade the performance and concurrency gain of CS for the integrity of RR?"
The answer is simple: the types of problems outlined are rare. The expense of using RR, however, can be substantial in terms of concurrency. So the tradeoff between the concurrency expense of RR and the efficiency of CS usually is not a sound one.
The third isolation level provided by DB2 is read stability (RS). Read stability is similar in functionality to the RR isolation level, but a little less. A retrieved row or page is locked until the end of the unit of work; no other program can modify the data until the unit of work is complete, but other processes can insert values that might be read by your application if it accesses the row a second time.
Consider using read stability over repeatable read only when your program can handle retrieving a different set of rows each time a cursor or singleton SELECT is issued. If using read stability, be sure your application is not dependent on having the same number of rows returned each time.
Finally, we come to the last, and most maligned isolation level, uncommitted read (UR). The UR isolation level provides read-through locks, also know as dirty read or read uncommitted. Using UR can help to overcome concurrency problems. When you're using an uncommitted read, an application program can read data that has been changed but is not yet committed.
The transaction is a long-running one and continues to execute without issuing a COMMIT.
2. At 9:01 a.m., a second transaction attempts to SELECT the data that was changed, but not committed.
If the UR isolation level were used for the second transaction, it would read the changed data even though it had yet to be committed. Obviously, if the program doesn't need to wait to take a lock and merely reads the data in whatever state it happens to be at that moment, the program will execute faster than if it had to wait for locks to be taken and resources to be freed before processing.
The implications of reading uncommitted data, however, must be carefully examined before being implemented. Several types of problems can occur. Using the previous example, if the long-running transaction rolled back the UPDATE to EMPNO 10020, the program using dirty reads may have picked up the wrong name ("MICHELLE") because it was never committed to the database.
Inaccurate data values are not the only problems that can be caused by using UR. A dirty read can cause duplicate rows to be returned where none exist. Alternatively, a dirty read can cause no rows to be returned when one (or more) actually exists. Additionally, an ORDER BY clause does not guarantee that rows will be returned in order if the UR isolation level is used. Obviously, these problems must be taken into consideration before using the UR isolation level.
Keep in mind, too, that the UR isolation level applies to read-only operations: SELECT, SELECT INTO, and FETCH from a read-only result table. Any application plan or package bound with an isolation level of UR will use uncommitted read functionality for any read-only SQL. Operations contained in the same plan or package and are not read-only will use an isolation level of CS.
Access is required to a reference, code, or look-up table that basically is static in nature. Due to the non-volatile nature of the data, a dirty read would be no different than a normal read the majority of the time. In those cases when the code data is being modified, any application reading the data would incur minimum, if any, problems.
Statistical processing must be performed on a large amount of data. Your company, for example, might want to determine the average age of female employees within a certain pay range. The impact of an uncommitted read on an average of multiple rows will be minimal because a single value changed will not greatly impact the result.
Dirty reads can prove invaluable in a data warehousing environment that uses DB2 as the DBMS. A data warehouse is a time-sensitive, subject-oriented, store of business data that is used for online analytical processing. Other than periodic data propagation and/or replication, access to the data warehouse is read-only. Because the data is generally not changing, an uncommitted read is perfect in a read-only environment due to the fact that it can cause little damage. More data warehouse projects are being implemented in corporations worldwide and DB2 with dirty read capability is a very wise choice for data warehouse implementation.
In those rare cases when a table, or set of tables, is used by a single user only, UR can make a lot of sense. If only one individual can be modifying the data, the application programs can be coded such that all (or most) reads are done using UR isolation level, and the data will still be accurate.
Finally, if the data being accessed already is inconsistent, little harm can be done using a dirty read to access the information.
Although the dirty read capability can provide relief to concurrency problems and deliver faster performance in specific situations, it also can cause data integrity problems and inaccurate results. Be sure to understand the implications of the UR isolation level and the problems it can cause before diving headlong into implementing it in your production applications.
It is important for DB2 DBAs and application programmers to know the four isolation levels and their impact on SQL. Using the isolation levels is an effective way to control concurrency and locking for your DB2 applications.
BIND and REBIND are important components in assuring efficient DB2 applications. Because the BIND/REBIND process determines exactly how your DB2 data is accessed it is important that you develop an appropriate strategy for when and how to REBIND your programs.
There are several common REBIND approaches taken by DB2 users. By far, the best approach is to REBIND your applications over time as the data changes. This approach involves some form of regular maintenance that keeps DB2 statistics up to date (or better yet, uses Real Time Statistics) and formulates new access paths as data volumes and patterns change.
Another (unfortunately) popular approach can be summarized as "if it ain't broke don't fix it!" This is the worst of the several approaches discussed here. The biggest problem with this approach is that you are penalizing every program in your subsystem for fear that a program or two may have a degraded access path. This results in potentially many programs having sub-optimal performance because the optimizer never gets a chance to create better access paths as the data changes.
Without accurate statistics there is little hope that the optimizer will formulate the best access path to retrieve your data. If the optimizer doesn't have accurate information on the size, organization, and particulars of your data then it will be creating access paths based on either default or inaccurate statistics. Incorrect statistics will cause bad choices to be made – such as choosing a merge-scan join when a nested loop join would be better, or failure to invoke sequential prefetch, or using the wrong index – or no index at all. And the problem of inaccurate statistics is pervasive. There are shops out there that never, or rarely, run RUNSTATS to gather up-to-date statistics. Make sure yours is not one of those shops!
Start with a RTS (or use RUNSTATS) to determine when to REORG.
The review is of utmost importance because the optimizer can make mistakes. And, of course, so can you. But your users will not call you when performance is better (or the same). They only dial your numbers when performance gets worse. As such, proactive shops will put best practices in place to test REBIND results comparing the before and after impact of the optimizer's choices. Again, there are tools that can help to automate this review process.
All good DB2 developers and DBAs know about Stage 1 and Stage 2 predicates, right? But have you ever heard of Stage 3 and Stage 4 predicates? Well, you're about to!
First of all, let's do a quick review to catch those readers who don't know what Stage 1 and 2 are. You may have heard about sargable and nonsargable, and if so, Stage 1 is sargable and Stage 2 is nonsargable. If not, don't worry about those terms, they are obsolete.
A predicate that can be evaluated in the Data Manager (DM) component of DB2, that is at the earliest stage of query execution, is called a Stage 1 predcicate. Stage 2 predicates need to be passed up to the Relational Data System (RDS) to process. So Stage 1 predicates are more efficient than Stage 2 predicates because the Data Manager component of DB2 is at a level closer to the data than the Relational Data System. Stage 1 predicates, being evaluated earlier in the data retrieval process, avoid the overhead of passing data from component to component of DB2. For this reason, developers are encourage to use Stage 1 predicates rather than Stage 2 predicates to optimize performance.
What makes a predicate Stage 2 instead of Stage 1? Well, it is all in the type of predicate you code and how you write your SQL. There is a list of Stage 1 and Stage 2 predicates in Chapter 12 of the DB2 Performance and Tuning manual. (The same chart also tells you whether a predicates is indexable or not.) Whenever you move from one release of DB2 to another one of the first things you should do is consult this manual to see if any predicates have changed from Stage 2 to Stage 1… and you should make sure all of your developers have a copy of that chart taped to their cubicle wall!
OK, so what is all of this about Stage 3 and Stage 4, then? Well, it is a way of thinking about some bad SQL practices. Instead of coding a SQL predicate some programmers choose to bring all (or most) of the data into their program and then filter it using IF-THEN or CASE statements. You can think of these as Stage 3 predicates because it is one more place that the data must be passed to before it can be determined whether the data is needed.
Stage 4? That is when you use a black box (see the link for an explanation if you don't know what a black box is)... Instead of filtering the data in the DM or the RDS or even in your program, you have to work with another program altogether – the black box – to return the right data.
My customer is wondering about the possible advantages of converting his IMS DB/DC system to IMS DC/DB2. The application currently performs well with an internal response time of less than .5 seconds on average.
Even with an arrival rate of 425 full-function transactions per second, the queue count rarely goes above 10. This system typically peaks at 12.5 million transactions per twelve-hour day against HDAM and HIDAM databases totaling close to 1 terabyte. The application itself is currently a bit over seven million lines of code.
Can you comment on the relative cost vs. advantage of moving an existing application from IMS DB to DB2 along with relative CPU capacity requirements?
Well, the main advantages of converting from IMS/DB to DB2 would be to gain better support for ad hoc queries, standard SQL (instead of non-standard DL/1) for writing queries and a deeper pool of talent to support the DB2 environment (there are more DB2 folks out there than IMS folks now-a-days).
The benefit of sticking with IMS is the good performance you currently enjoy as well as no need to convert the database structures or the 7 million lines of application code. Converting database structures is not horribly difficult, but there are some gotchas that can arise. The bigger problem is converting all of those DL/1 calls to appropriate SQL. This will not be a simple 1 to 1 conversion and it will very likely be quite time-consuming.
I guess it boils down to this: How happy are you with the current application, are you able to support it properly and how many other IMS/DB databases do you support? If this is the last IMS/DB database and you are looking to rid yourself of the IMS license, then it might make sense to convert. But you should do a project plan and cost/benefit analysis before making your final decision (conversion can be very costly). If you have a lot of other IMS/DB databases, then it probably doesn't make a lot of sense to convert to DB2 unless you cannot support the needs of your end users (management, ad hoc support, etc.) using IMS.
In terms of CPU requirements, DB2 will consume more CPU than IMS. DB2 optimizes queries internally whereas IMS programmers construct access paths to data. This additional requirement will cause DB2 to consume more CPU. But, of course, that additional CPU brings with it the enormous benefit of database optimization and better ad hoc query support.
You might also want to take a look at a product like DL/2. I have never used it so I cannot recommend for or against its functionality, but it looks like it might save you some work.
DB2 allows you to add and subtract DATE, TIME, and TIMESTAMP columns. In addition, you can add date and time durations to, or subtract them from, date and time columns. But use date and time arithmetic with care. If you do not understand the capabilities and features of date and time arithmetic, you will likely encounter some problems implementing it.
Keep the following rules in mind.
April has 30 days, so the normal response would be to subtract 30 days to subtract one month. The result of the first statement is 1997/03/03, but the result of the second statement is 1997/03/04. In general, use like durations (for example, use months or use days, but not both) when you issue date arithmetic.
Another consideration: if one operand is a date, the other operand must be a date or a date duration. If one operand is a time, the other operand must be a time or a time duration. You cannot mix durations and data types with date and time arithmetic.
If one operand is a timestamp, the other operand can be a time, a date, a time duration, or a date duration. The second operand cannot be a timestamp. You can mix date and time durations with timestamp data types.
Now, what exactly is in that field returned as the result of a date or time calculation? Simply stated, it is a duration. There are three types of durations: date durations, time durations, and labeled durations.
Date durations are expressed as a DECIMAL(8,0) number. The result of subtracting one DATE value from another is a date duration. To be properly interpreted, the number must have the format yyyymmdd, where yyyy represents the number of years, mm the number of months, and dd the number of days.
Time durations are expressed as a DECIMAL(6,0) number. To be properly interpreted, the number must have the format hhmmss, where hh represents the number of hours, mm the number of minutes, and ss the number of seconds. The result of subtracting one TIME value from another is a time duration.
This will add three and a half years to the current date.
One of the fun things about publishing is getting questions from readers that make you think. A recent question I received went something like this: "Can I get the odd and even number of rows from a DB2 table?"
Well, my first reaction was to think "this guy doesn't understand the way a SQL DBMS like DB2 works." The data in DB2 tables is not ordered, so there is no way to guarantee that the rows are odd or even numbered. While that observation may (or may not) have been true, it didn't help the guy. So I thought about it and came up with a possible work-around solution.
The first thing we have to do is to mimic row numbers in DB2. Until V9, DB2 did not support the row number construct (such as you can find in Oracle), and we'd like this to work for the versions in support today (V8 and V9).
Of course, there is no guarantee that the same exact rows will be even (or odd) for subsequent executions of this query. It all depends how DB2 optimizes the query for execution. But it does provide a nice way to produce samples of the data (perhaps to populate a test bed of data).


text:
De Portola Middle » About Us » Who is Gaspar de Portola?
We've Got History
Our school is named for the 18th century sea captain Gaspar De Portolá, called by many the First Governor of California. He had many adventures exploring early California and Mexico. He led an expedition that traveled with Father Junipero Serra, an important figure in California history who was a leader in creating the series of missions in the state that led to its early settlement.
De Portolá, was a nobleman who served as a soldier in the Spanish army in Italy and Portugal before being appointed Governor of Las Californias from 1768-1770. In 1767, the Viceroy of Mexico ordered the arrest and deportation of all Jesuits (a branch of Catholicism) in colleges and missions. De Portolá, as the newly appointed Governor of Baja California, was responsible for expelling the Jesuits from Baja California, where they had established 14 missions in 72 years.
De Portolá, a good leader. In 1768, he led an expedition to create bases up the California coast in San Diego and Monterey. Three ships left headed for San Diego. The San Carlos, which left first, hit heavy winds and storms and took 110 days to reach its destination. A navigation error caused them to miss San Diego on the first try and having to double back. The San Antonio took 54 days to arrive. A third vessel with supplies was probably lost at sea.
After their hard journeys, most of the men aboard ship became ill and many died. A total of 219 men had left Lower California some two months before and little more than a hundred now survived. After replenishing supplies in San Diego, De Portolá and Serra decided to travel by land as well as sea to search for Monterey, and establish a colony there.
His route on his explorations included the beginnings of the Carmel Mission and the Presidio of Montrey.
When Governor De Portolà's task was finished, he sailed away never to return to California. In 1776, De Portolà was appointed governor of the Mexican state of Puebla. In 1784, he returned to Spain where he served as commander of a cavalry dragoon. He died in 1786.


text:
import * as utils from "tsutils";
import * as ts from "typescript";

import * as Lint from "../index";

const OPTION_CHECK_PARAMETERS = "check-parameters";

interface Options {
    parameters: boolean;
}

export class Rule extends Lint.Rules.AbstractRule {
    /* tslint:disable:object-literal-sort-keys */
    public static metadata: Lint.IRuleMetadata = {
        ruleName: "no-duplicate-variable",
        description: "Disallows duplicate variable declarations in the same block scope.",
        descriptionDetails: Lint.Utils.dedent`
            This rule is only useful when using the \`var\` keyword -
            the compiler will detect redeclarations of \`let\` and \`const\` variables.`,
        rationale: Lint.Utils.dedent`
            A variable can be reassigned if necessary -
            there's no good reason to have a duplicate variable declaration.`,
        optionsDescription: `You can specify \`"${OPTION_CHECK_PARAMETERS}"\` to check for variables with the same name as a parameter.`,
        options: {
            type: "string",
            enum: [OPTION_CHECK_PARAMETERS],
        },
        optionExamples: [
            true,
            [true, OPTION_CHECK_PARAMETERS],
        ],
        type: "functionality",
        typescriptOnly: false,
    };
    /* tslint:enable:object-literal-sort-keys */

    public static FAILURE_STRING(name: string): string {
        return `Duplicate variable: '${name}'`;
    }

    public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
        return this.applyWithWalker(new NoDuplicateVariableWalker(sourceFile, this.ruleName, {
            parameters: this.ruleArguments.indexOf(OPTION_CHECK_PARAMETERS) !== - 1,
        }));
    }
}

class NoDuplicateVariableWalker extends Lint.AbstractWalker<Options> {
    private scope: Set<string> = new Set();
    public walk(sourceFile: ts.SourceFile) {
        this.scope = new Set();
        const cb = (node: ts.Node): void => {
            if (utils.isFunctionScopeBoundary(node)) {
                const oldScope = this.scope;
                this.scope = new Set();
                ts.forEachChild(node, cb);
                this.scope = oldScope;
                return;
            }
            if (this.options.parameters && utils.isParameterDeclaration(node)) {
                this.handleBindingName(node.name, false);
            } else if (utils.isVariableDeclarationList(node) && !utils.isBlockScopedVariableDeclarationList(node)) {
                for (const variable of node.declarations) {
                    this.handleBindingName(variable.name, true);
                }
            }
            return ts.forEachChild(node, cb);
        };
        return ts.forEachChild(sourceFile, cb);
    }

    private handleBindingName(name: ts.BindingName, check: boolean) {
        if (name.kind === ts.SyntaxKind.Identifier) {
            if (check && this.scope.has(name.text)) {
                this.addFailureAtNode(name, Rule.FAILURE_STRING(name.text));
            } else {
                this.scope.add(name.text);
            }
        } else {
            for (const e of name.elements) {
                if (e.kind !== ts.SyntaxKind.OmittedExpression) {
                    this.handleBindingName(e.name, check);
                }
            }
        }
    }
}


text:
HOME > News | Products | Ready Meals |
The Fry Family Food Co. to launch plant-based pizzas and fishless fillets
Read Time: | 15th January 2020
The Fry Family Food Co. has teased two brand new lines for 2020, including plant-based pizzas and fishless fillets!
Joining the ever-growing range of delicious meat alternatives, The Fry Family Food Co. has announced they are adding two brand new lines for 2020.
Two pizzas will also be joining the Fry Family, the Smoky BBQ Woodfired Pizza is topped with red and yellow peppers, red onions, and Fry's famous chicken-style strips marinated in smoky BBQ sauce.
The Mediterranean Woodfired Pizza is sprinkled with sliced cherry tomatoes, baby spinach, black olives and Fry's chicken-style strips.
The brand is also releasing fishless fillets made with succulent fish-style plant protein coated in a crispy tempura batter with added flaxseed oil.
Both products are launching in 2020 and will be available to purchase exclusively from Tesco.
In a statement sent to Vegan Food & Living, Tamy Fry, International Marketing Director at The Fry Family Food Co, said: "We're always developing our product range, taking on board feedback from customers. Fry's fans asked, and we listened. Plant-based pizzas have been one of our most requested new products so we're excited to be able to announce they're coming to stores this year!
"Crispy prawn-style pieces are also some of our bestselling products, and we think our fishless fillets will be the perfect addition to our plant-based portfolio! There is no reason why people who enjoy the taste of meat and fish can't still do so, without the environmental and ethical impact. That's our philosophy!
Subscribe to our newsletter and follow Vegan Food & Living on Facebook to keep up to date with the latest news, recipes and product launches from the vegan community.


text:
Review: Purple Noon (1960)
Purple Noon (Plein Soleil, 1960)
Dir: René Clement
Starring: Alain Delon, Marie Lafornet, Maurice Ronet
'Is insincerity such a terrible thing? I think not. It is merely a method by which we can multiply our personalities.'
(-'The Picture of Dorian Grey', Oscar Wilde.)
René Clement's beautifully lush adaptation of Patricia Highsmith's The Talented Mr. Ripley - the first of two (the second being Anthony Minghella's 1999 version) - is a lissome ode to the luxuriant power that wealth yields, weaving a story both repelled and seduced by uninhibited greed and its benefits. Revelling in the hypnotic beauty of 1960's Rome, it sets the same desirous gaze as Ripley at the playboy's life; the jewel-toned summers and sparkling seaside resorts, the drunken gamblers in their white linen suits, the preening women to be gained as objects of desire - in much the same manner as a car or a yacht. Delon as Ripley is truly an identity defined by consumption; he exists merely through the prism of Greenleaf, coldly calculating until he can inhabit his friend's persona. His motivations seem less guided by traditional obsession or jealousy (as Matt Damon's version of Ripley suggests) than by blind, chameleonic ambition. Delon's almost blinding good looks function as both charming aid to his crimes and suggest his frighteningly empty malevolence. His Ripley is less precise and more carefree than his 1999 portrayal; his own star persona and appearance so closely matches that of the tanned, languishing playboy that he appears entirely at ease as an interloper - and perhaps this makes Mr. Ripley even the more talented.
A particularly telling scene is one in which, casually strolling through a seaside market, Ripley inspects some of the more grotesque fish for sale. With a smirking nonchalance - having just committed a murder at sea - he laughs at Greenleaf's watery fate, and relishes in the strange, morbid wonder of inspecting the creatures who will soon be feasting on his old friend. He remains unaware that there is nothing Neptune hates more than the hubris of a handsome man - and the film's conclusion attests to this with an awful irony.
Labels: alain delon, french cinema, rene clement
Review: Shock Corridor (1964)
Review: Spring Breakers (2013)


Laramie, Wyoming receives an average of 11″ of precipitation per year. Our growing season is usually no longer than 90 days. The soil ranges from rocky to clay; not exactly the black loam of the Midwest! Click here for the USDA Hardiness Zone Map – Laramie is in zone 4b, though local gardeners believe Laramie should be zone 4a or 3.
Despite all of these challenges and more, gardening in Laramie is not only POSSIBLE, it's FUN! And if you can do it here, you can do it anywhere! Below are tips for growing vegetables, fruits, flowers and trees in this high plains environment.
Be selective about which plants you choose to grow in your garden. Water-wise, cold-tolerant and short-season are three musts on the plant criteria check-off list! The Demo Gardens in LaBonte Park are great examples of a Laramie-based xeriscaped garden (meaning plants meet those three criteria). Barnyards and Backyards has great resources for Laramie-appropriate gardening!
Help out your soil. Soil in Laramie can range from rocky to sandy to clayey, all within a 5 mile radius! So depending on where you're gardening, you're most likely going to need compost, and lots of it. Start a compost pile in your yard by following these tips, or collect compost from ACRES or your neighbor.
Use season extenders. Whether you use a cold frame, hoop house, greenhouse, Walls o' Water, milk jugs, or any other method you can find, the season is simply not long enough to grow many fruits and vegetables. Season extenders help dramatically and can make the difference between a skimpy vegetable garden and a harvest.
Wondering what if any fruit trees grow in Laramie. Thank you.
Hello, Virginia and Charly. Yes, there are fruit trees that grow in Laramie, but they might not successfully produce fruit every year depending on the late-spring frosts that we can get. There are apple varieties, plums, and sour cherries (e.g., Bali) that do well here. Look for trees that are hardy to zone 3 (maybe zone 4 if you're feeling lucky), flower late, and bear fruit early. There are also some crabapples that are larger and tastier (such as Dolgo) and of course Nanking cherries. On the shrubbier side of things, serviceberries and currants do great here as well. Your success will also depend on what part of town you live in and what critters might be in your area. Good luck! Amy F.
I am wondering the same thing. Any answers?
Are there any pictures of flowering cherry trees in Laramie?
Hello, Fred. I don't have any pictures of flowering cherry trees in Laramie. Other LGC members might, but I don't think there are any on this site. They will be flowering soon, though, if they haven't started already. My sand cherry is flowering now. Amy F.
Are there Magpies in Laramie?
And if there are Magpies, how do I attract them to my place?
Can you grow cannas and Mexican Petunias in Laramie?
Hello, Linda. Both cannas and Mexican Petunias like warmer weather than we have here in Laramie. You might be able to grow them as annuals, but they probably won't thrive unless you have a very protected spot. If you give them a try, let us know how they do! Amy F.


text:
The Andaz Liverpool Street Hotel review in London – and Lady Gaga and Beyonce are fans of it!
Posted on October 5, 2021 November 2, 2021 Author Renee J. Clements	Comment(0)
05 October 2021 – 09:49 BST
Sharnaz shahid
The review of the Andaz Liverpool Street hotel in London which also hosted Lady Gaga and Beyoncé! See the pictures ….
Built in 1884 as the Great Eastern Hotel, the Andaz Liverpool Street Hotel is a five star lifestyle hotel and the start of every Shoreditch adventure.
Globally while having a local perspective, he immerses clients in the ever-changing, vibrant and creative culture of East London so that they feel like local from the start of their trip to the hotel – moreover, Lady Gaga and Beyonce are fans too!
READ: The Gainsborough Bath Spa review – the perfect UK stay
Loading the player …
WATCH: Inside the royal family's favorite hotels
The Poker face The hitmaker took part in an ultra-glamorous photoshoot in the Secret Room – which served as a Masonic temple in the past – while Beyoncé graced the accommodation's firm beds when she came to the capital during one of its many sold-out tours.
Part of the Hyatt portfolio, the hotel offers a vibrant experience that is truly unique to each guest: blending personal style with attentive, straightforward service.
MORE: Why The Balmoral Hotel In Edinburgh Must Be On Your Bucket List
SEE: 11 of the UK's most Instagrammable walks
Beyonce and Lady Gaga are big fans of the place
The hotel has 267 spacious and modern rooms including 15 suites. Designed in a residential style, the rooms embody the cozy and welcoming philosophy of Andaz's 'home', with winged back chairs by Morgan, bespoke jewel walnut desks and super plush beds. Large Artisan Photographer's Lamps reinforce the theme of playfulness and create a cozy atmosphere.
One of the suites
Designed in a residential style, the rooms also refer to the originality and unexpected elements of East London. This includes the use of tattoo art on the tan leather headboards, which depict the silk weavers who dominated the Shoreditch textile industry, and other artistic illustrations in the bathroom, designed exclusively by the local artist Sophie Mo.
The bathrooms are aesthetic
This design captures the history and heritage of the hotel and reflects the hotel's unique location as a gateway between the traditionally refined city and the changing and dynamically creative Shoreditch. Its aesthetic is shaped by the unique identities of these two areas.
In a larger suite
Eat Drink
The hotel offers a range of 14 unique and diverse event spaces for business, as well as social events, from sophisticated anniversary parties to engagement and anniversary dinners. Here there are five restaurants and bars, each with its own distinctiveness and unique offering:
Rake's Café Bar – a café by day and a bar by night, it's a place to get away from the city; offering simple, comforting cuisine alongside artisanal coffee and a specially crafted signature cocktail menu of modern and classic concoctions.
Eastway Brewery – this restaurant evokes the vibe of the East End, offering all-day dining and a familiar weekend brunch in a relaxed yet vibrant setting with terraces on bustling Liverpool Street.
The hotel has many bars and restaurants
Miyako – this must-see restaurant is an intimate and authentic Japanese restaurant offering diners a traditional menu of sushi, sashimi and teriyaki as well as a range of sake and Japanese beers.
Lady Abercorn's Pub and Kitchen – the pub is a contemporary pub full of intrigue, serving both classic and innovative food and a wide selection of beers, wines and spirits.
Lady Abercorn's is a contemporary pub full of intrigue
MORE: 24 of the UK's best luxury spa breaks
Other gems
15 modern and distinctly unique spaces are on offer to accommodate any occasion, accommodating up to 500 guests, from the informal and contemporary loft-style Andaz studio with floor-to-ceiling windows to the majestic scale and grandeur of the ballroom 1901 classified Grade II.
At the center of the 1901 Ballroom is the building's original stained-glass dome, which survived the 1940s Blitz and gives the space a captivating feature, flooding it with natural light.
Lady Gaga filmed games of Poker Face inside the Masonic temple
Located on the first floor, Exchange blends modern and traditional harmoniously, with high ceilings and floor-to-ceiling windows with a traditional Victorian fireplace and contemporary furnishings. A stunning oak table fills the center of the room with space for up to 16 people seated, crowned by an eye-catching chandelier.
MORE: 14 Of The Best Afternoon Tea Places In London You Need To Book
The interior of the hotel is quite impressive
Perhaps one of London's best kept secrets is the Masonic Temple located deep within the hotel and available for private hire. Concealed by heavy studded doors and accessible by a spiral staircase and a spacious mahogany-paneled antechamber, this is the only original Freemasonry meeting pavilion built in 1912.
Prices at Andaz London Liverpool Street start at £ 169 for a night in a Queen room.
Make sure you never miss a TRAVEL story! Sign up for our newsletter to get all of our celebrity, royalty and lifestyle news delivered straight to your inbox.
Malibu Beach Inn – Hotel Reviews
Balboa Bay Resort – Hotel Reviews
Disney's Yacht Club Resort – Hotel Reviews
Cheval Blanc Paris hotel review: first in
Wynn Las Vegas – Hotel Review, January 2021
When you buy through our links, Insider may earn an affiliate commission. Learn more. The Wynn Las Vegas is a popular upscale resort on the Las Vegas Strip. The property, which includes the sister hotel Encore, has a casino, spa, restaurants, theaters, and more. I was impressed with my entry-level room for $ 149 per […]
InterContinental Marseille Hotel Review: This five-star stay in France's second city offers class and style
Posted on January 5, 2022 January 5, 2022 Author Renee J. Clements
In a word: The original grande dame of this port city with glam charm. Price level: £££ The neighborhood The InterContinental – also known as Hotel Dieu – occupies a privileged position just one street from the charming Old Port of Marseille. Its buttercream stone facade, all lit up at night, is immediately recognizable. This […]
Cornwall hotel review: why you'll have fun at the family-run Esplanade hotel in Newquay
Do you like children and surfing? Then you will have fun at the family hotel Esplanade de Newquay, says the inspector Inspector pays £ 255 for Saturday night dinner, bed and breakfast He dines at the hotel's Cove restaurant, where he finds the prices "reasonable" Remember, the inspector pays his way … and says it […]
Restaurant Review: Dine in the Depot at the stunning Harvey House | Food drink
Bibi, London W1: "Genius and subversive" – restaurant review | Food


It's time to replace your legacy phone system — but, unlike a decade ago, this isn't a simple hardware upgrade. Now you have choices: Do you stick with an on-premises system, or do you move into the cloud? Or try to find a combination of both?
We often don't think of phones as future-forward tech, but the office phone system has evolved to provide advanced communications and collaboration across organizations, including branch offices and mobile workers. The option you choose will depend on your business pain points, which features are essential and, of course, your budget.
With this approach, your phone system is housed on-premises and your staff maintains the network.
Pros: This allows you to maintain control over your voice and data. And a full system purchase is a one-time investment with no additional monthly charges and no contracts.
Cons: You need the right IT staff in place to maintain the network. Also consider that many manufacturers are taking this option off the table, discontinuing products and support.
Cloud-based phone systems use a dedicated or shared Internet connection for one or more locations.
Pros: You can significantly reduce telecommunications costs by delivering calls over the Internet. You pay only for extensions being used, and can add extensions — as well as new features and capabilities — as your organization grows. It's secure, since the equipment sits in a secure third-party data centre, and business continuity is built-in.
Cons: You may not have the expertise in-house to design, install or manage a cloud-based phone system. Fortunately, there are ways around this, such as working with a managed service provider.
Hybrid phone systems combine the benefits of on-premises and cloud-based phone systems, allowing you to use traditional phone lines for local calls and the cloud for long-distance and international calls.
Pros: A hybrid system lets you maintain control while using your existing infrastructure, resulting in significant cost savings, flexibility and scalability.
Cons: Again, you may not have the expertise in-house. A solutions engineer can help you design and implement a hybrid system that works for your business.
Moving to a cloud or hybrid system isn't just about reducing your phone bill. Unified communications tools can provide employees with a single application for voice, video, messaging, presence, audio conferencing, mobility and team collaboration, with a communications experience that's consistent across all devices.
That can help you meet business goals, such as improving customer service or boosting employee productivity through enhanced collaboration. By integrating the cloud platform with your contact centre, for example, you can link customers and data in real time — and deliver a superior customer experience.
Today's advanced phone systems can be complicated to design and deploy. If you don't have the expertise in-house, consider working with a managed service provider that can customize the right solution for your business, provide on-site project coordination, installation and testing of equipment, as well as on-site user training and support.


Pearl River (Miss.) Community College cornerback Xavier Grindle tweeted that "had a great talk" Thursday with UL head coach Mark Hudspeth.
Northwest Mississippi Community College All-American cornerback Treston Decoud, back from an official visit to Toledo visited Thursday, the program tweeted, on campus with Oregon State head coach Gary Anderson.
UL also is recruiting Decoud, who visited Oregon State last weekend.
Decoud is a Louisiana native who played at Lakeshore High.
(He meant to say UL).
Lewis also holds an offer from LSU that he received last November.


text:
Q: Customise a control in dynamics crm I've written code that can make a phone dial a number from a function call, that's done and dusted.
What I would like to achieve is adding a Dial button to each phone number field on the forms in Dynamics CRM. Eventually this could also create a new phone record fill in the basic details and show it to the user to enter notes and an outcome for the phone call, and perhaps some other workflow bits to schedule the next call.
Can I put a custom control on a standard form in place of the standard control. I'm assuming it would have to be an IFrame to an asp.net page, that pulls in the record id, and the field name, looks up the number to show in a text box, and passes the number to the DialNumber function. Hey presto...
I assume its not going to be that easy... Has anyone tried this before, what's the process, what are the gotchas?

A: I solved this very problem by putting some html(divs and anchors) over the telephone fields.  The below code puts a phone icon on the end of the textbox for the given field.
crmForm.ApplyClickToDial= function(field, href){
var phoneField = field;
phoneField.style.position = "relative";

var imgAnchor = document.createElement("a");
phoneField.appendChild(imgAnchor);

imgAnchor.href=href;
imgAnchor.style.position = "absolute";
imgAnchor.style.right = ".5em";
imgAnchor.style.top=".5em";

var image = document.createElement("img");
image.src ="/_imgs/ico_16_4210.gif";
imgAnchor.appendChild(image);
}

var mobileNumber = crmForm.all.mobilephone.DataValue;
crmForm.ApplyClickToDial(crmForm.all.mobilephone_d, "http://callphone/" + mobileNumber );  /*  the "_d"  represents the control's encompassing td element*/

redpajama_set_name: RedPajamaStackExchange


Today is the time when you can add any upgrade to incorporate style and functionality to your living space. However, sometimes new updates like additional cabinets or other furnishing options only add up to more mess. The main goal of renovating your home is to make it more practical and not full of clutter.
So, instead of creating a mess of cabinets, baskets or bins, why don't you try to make storage the cornerstone of your home renovation? Creating new and plentiful storage spaces should be the number one goal of any major home renovation project because it will enhance the versatility of the home and also increase its value in the long run.
The biggest mistake most homeowners make when adding more storage space is to rely on traditional cabinets and closets. In reality, there are plenty of clever and stylish ways to add storage to a home, for both general purpose and specifically tailored use. Here are some of the most interesting options.
In multistory homes, it's not uncommon to have a closet tucked right into the space underneath the stairs. Due to the slope of the stairs, however, most such closets waste some valuable space where the stairs meet the floor. To remedy the problem, consider pull-out drawers at the bottom of the staircase that makes it easy to access the wasted space from the outside. For the intrepid, it's possible to remove the closet entirely and convert the entire space to a structured pull-out organizer that blends right into the surrounding wall when not in use.
Jewelry is meant to be an attractive addition to a wardrobe, but when you have enough of it, it can add up to an unsightly mess. For jewelry storage, we often employ a mixture of jewelry boxes and free-standing organizers but they only take up tabletop and floor space. Also, they make an inviting target in the event of a robbery. To address these issues, consider a hidden, inset jewelry storage unit in your bedroom. They're easy to build, and if you opt for a secured unit, you might even save on insuring the jewelry contained inside.
Drawers make a good storage option, but stuffing countless small objects in one big drawer adds up to mess. This is because you cannot easily find them in a cluster of tiny objects. To solve this issue, you can make the drawers adjustable to serve your changing storage needs. A pullout tray just above the drawer can serve as an extra cutting board or prep space or makeup table. A little molding or trim makes storage feel customized and more practical.
One of the most common home renovations is to finish attic space for use as an additional bedroom. It's a fantastic way to upgrade your home without the cost of building a full-fledged extension. However, the problem with most attic conversions is that they often leave behind some awkward spaces due to the slope of the roof. In attic rooms, floor space is also at a premium, making adequate storage an issue. Installing knee-wall dressers is an excellent way to tackle this problem. They provide storage drawers comparable to a free-standing dresser, without sacrificing an inch of floor space.
You can even integrate dishwasher and refrigerator with cabinetry around in order to avoid an inch of usable kitchen space. You can even choose double or triple duty appliances. For instance, an appliance with its top compartment serving as a refrigerator, the middle as a freezer, and the bottom a wine cooler would be a great addition to a small kitchen.
You may consider a built-in hairdryer drawer and pullout mirror in your renovated bathroom like an upscale hotel.
These clever storage ideas represent the tip of the iceberg for homeowners looking to upgrade their homes. There's almost no end to the amazing and functional ways that designers, carpenters, and DIY enthusiasts have found to maximize every available inch in homes. That means no matter the situation, and no matter the type of space, someone's probably already thought of a great way to use it. All it takes is a little forethought and research to turn any renovation project into a home storage miracle.


The Seminole Library has been in this community since it first opened its doors in 1953. In 2000, the library was closed for five months for renovations that included an improved children's area, reading area, wheelchair accessible entrance and washrooms and an enhanced technology center.
This Branch offers a full reference service, a selection of fiction, non-fiction, adult and children's books, audio books, magazines, 4 public and 1 express computer stations for use by customers, and Internet access.
© 2016, Windsor Public Library. All rights reserved.


text:
<?php
namespace Derp\ER\Pod;

class PodId
{
    private $id;

    private function __construct() {}

    public static function fromString($string)
    {
        $patientId = new static();
        $patientId->id = $string;

        return $patientId;
    }

    public function __toString()
    {
        return $this->id;
    }
}


text:
Maia, Alex Shibutani extend break from ice dance competition
By Rachel LutzMay 24, 2019, 11:56 AM EDT
Brother-sister ice dance duo Maia and Alex Shibutani will not compete next season, the Olympic bronze medalists announced via U.S. Figure Skating on Friday.
"We're healthier and stronger than we were after the Olympics, and we're continuing to push ourselves," Maia Shibutani said in a press release.
"We've continued to skate a lot, and we feel like we've benefited from some time away to create in different environments and focus on experiences that can help us grow," Alex said.
The "Shib Sibs" won the U.S. title in 2016 and 2017. They won their first world medal in 2011 (bronze) before reaching the world podium again in 2016 and 2017 with silver and bronze, respectively.
They most recently competed at the 2018 PyeongChang Olympics, where they earned bronze both individually and in the team event.
Maia and Alex Shibutani are now the second ice dance medalists from PyeongChang to announce they'll sit out at least part of next season. Gold medalists Tessa Virtue and Scott Moir of Canada will tour instead this fall and are not expected to return to competition.
The siblings haven't stayed away from the ice entirely in their break from the sport, though — they've also been touring and performing in shows.
The Shibutanis became the second set of siblings to earn Olympic ice dance medals after France's Isabelle and Paul Duchesnay in 1992.
MORE: How Gracie Gold landed in Philadelphia, thoughts competitive return
Follow @rchlltz