End of the Project Gutenberg EBook of Tom Sawyer, Detective, by Mark Twain (Samuel Clemens) *** END OF THIS PROJECT GUTENBERG EBOOK TOM SAWYER, DETECTIVE *** ***** This file should be named 93-h.htm or 93-h.zip ***** This and all associated files of various formats will be found in: http://www.gutenberg.org/9/93/ Produced by An Anonymous Volunteer, and David Widger Updated editions will replace the previous one--the old editions will be renamed. Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without paying copyright royalties. Special rules, set forth in the General Terms of Use part of this license, apply to copying and distributing Project Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm concept and trademark. Project Gutenberg is a registered trademark, and may not be used if you charge for the eBooks, unless you receive specific permission. If you do not charge anything for copies of this eBook, complying with the rules is very easy. You may use this eBook for nearly any purpose such as creation of derivative works, reports, performances and research. They may be modified and printed and given away--you may do practically ANYTHING with public domain eBooks. Redistribution is subject to the trademark license, especially commercial redistribution. *** START: FULL LICENSE *** THE FULL PROJECT GUTENBERG LICENSE PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK To protect the Project Gutenberg-tm mission of promoting the free distribution of electronic works, by using or distributing this work (or any other work associated in any way with the phrase “Project Gutenberg”), you agree to comply with all the terms of the Full Project Gutenberg-tm License (available with this file or online at http://gutenberg.org/license). Section 1. General Terms of Use and Redistributing Project Gutenberg-tm electronic works 1.A. By reading or using any part of this Project Gutenberg-tm electronic work, you indicate that you have read, understand, agree to and accept all the terms of this license and intellectual property (trademark/copyright) agreement. If you do not agree to abide by all the terms of this agreement, you must cease using and return or destroy all copies of Project Gutenberg-tm electronic works in your possession. If you paid a fee for obtaining a copy of or access to a Project Gutenberg-tm electronic work and you do not agree to be bound by the terms of this agreement, you may obtain a refund from the person or entity to whom you paid the fee as set forth in paragraph 1.E.8. 1.B. “Project Gutenberg” is a registered trademark. It may only be used on or associated in any way with an electronic work by people who agree to be bound by the terms of this agreement. There are a few things that you can do with most Project Gutenberg-tm electronic works even without complying with the full terms of this agreement. See paragraph 1.C below. There are a lot of things you can do with Project Gutenberg-tm electronic works if you follow the terms of this agreement and help preserve free future access to Project Gutenberg-tm electronic works. See paragraph 1.E below. 1.C. The Project Gutenberg Literary Archive Foundation (“the Foundation” or PGLAF), owns a compilation copyright in the collection of Project Gutenberg-tm electronic works. Nearly all the individual works in the collection are in the public domain in the United States. If an individual work is in the public domain in the United States and you are located in the United States, we do not claim a right to prevent you from copying, distributing, performing, displaying or creating derivative works based on the work as long as all references to Project Gutenberg are removed. Of course, we hope that you will support the Project Gutenberg-tm mission of promoting free access to electronic works by freely sharing Project Gutenberg-tm works in compliance with the terms of this agreement for keeping the Project Gutenberg-tm name associated with the work. You can easily comply with the terms of this agreement by keeping this work in the same format with its attached full Project Gutenberg-tm License when you share it without charge with others. 1.D. The copyright laws of the place where you are located also govern what you can do with this work. Copyright laws in most countries are in a constant state of change. If you are outside the United States, check the laws of your country in addition to the terms of this agreement before downloading, copying, displaying, performing, distributing or creating derivative works based on this work or any other Project Gutenberg-tm work. The Foundation makes no representations concerning the copyright status of any work in any country outside the United States. 1.E. Unless you have removed all references to Project Gutenberg: 1.E.1. The following sentence, with active links to, or other immediate access to, the full Project Gutenberg-tm License must appear prominently whenever any copy of a Project Gutenberg-tm work (any work on which the phrase “Project Gutenberg” appears, or with which the phrase “Project Gutenberg” is associated) is accessed, displayed, performed, viewed, copied or distributed: This eBook is for the use of anyone anywhere at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.org 1.E.2. If an individual Project Gutenberg-tm electronic work is derived from the public domain (does not contain a notice indicating that it is posted with permission of the copyright holder), the work can be copied and distributed to anyone in the United States without paying any fees or charges. If you are redistributing or providing access to a work with the phrase “Project Gutenberg” associated with or appearing on the work, you must comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain permission for the use of the work and the Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or 1.E.9. 1.E.3. If an individual Project Gutenberg-tm electronic work is posted with the permission of the copyright holder, your use and distribution must comply with both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the copyright holder. Additional terms will be linked to the Project Gutenberg-tm License for all works posted with the permission of the copyright holder found at the beginning of this work. 1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm License terms from this work, or any files containing a part of this work or any other work associated with Project Gutenberg-tm. 1.E.5. Do not copy, display, perform, distribute or redistribute this electronic work, or any part of this electronic work, without prominently displaying the sentence set forth in paragraph 1.E.1 with active links or immediate access to the full terms of the Project Gutenberg-tm License. 1.E.6. You may convert to and distribute this work in any binary, compressed, marked up, nonproprietary or proprietary form, including any word processing or hypertext form. However, if you provide access to or distribute copies of a Project Gutenberg-tm work in a format other than “Plain Vanilla ASCII” or other format used in the official version posted on the official Project Gutenberg-tm web site (www.gutenberg.org), you must, at no additional cost, fee or expense to the user, provide a copy, a means of exporting a copy, or a means of obtaining a copy upon request, of the work in its original “Plain Vanilla ASCII” or other form. Any alternate format must include the full Project Gutenberg-tm License as specified in paragraph 1.E.1. 1.E.7. Do not charge a fee for access to, viewing, displaying, performing, copying or distributing any Project Gutenberg-tm works unless you comply with paragraph 1.E.8 or 1.E.9. 1.E.8. You may charge a reasonable fee for copies of or providing access to or distributing Project Gutenberg-tm electronic works provided that - You pay a royalty fee of 20% of the gross profits you derive from the use of Project Gutenberg-tm works calculated using the method you already use to calculate your applicable taxes. The fee is owed to the owner of the Project Gutenberg-tm trademark, but he has agreed to donate royalties under this paragraph to the Project Gutenberg Literary Archive Foundation. Royalty payments must be paid within 60 days following each date on which you prepare (or are legally required to prepare) your periodic tax returns. Royalty payments should be clearly marked as such and sent to the Project Gutenberg Literary Archive Foundation at the address specified in Section 4, “Information about donations to the Project Gutenberg Literary Archive Foundation.” - You provide a full refund of any money paid by a user who notifies you in writing (or by e-mail) within 30 days of receipt that s/he does not agree to the terms of the full Project Gutenberg-tm License. You must require such a user to return or destroy all copies of the works possessed in a physical medium and discontinue all use of and all access to other copies of Project Gutenberg-tm works. - You provide, in accordance with paragraph 1.F.3, a full refund of any money paid for a work or a replacement copy, if a defect in the electronic work is discovered and reported to you within 90 days of receipt of the work. - You comply with all other terms of this agreement for free distribution of Project Gutenberg-tm works. 1.E.9. If you wish to charge a fee or distribute a Project Gutenberg-tm electronic work or group of works on different terms than are set forth in this agreement, you must obtain permission in writing from both the Project Gutenberg Literary Archive Foundation and Michael Hart, the owner of the Project Gutenberg-tm trademark. Contact the Foundation as set forth in Section 3 below. 1.F. 1.F.1. Project Gutenberg volunteers and employees expend considerable effort to identify, do copyright research on, transcribe and proofread public domain works in creating the Project Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm electronic works, and the medium on which they may be stored, may contain “Defects,” such as, but not limited to, incomplete, inaccurate or corrupt data, transcription errors, a copyright or other intellectual property infringement, a defective or damaged disk or other medium, a computer virus, or computer codes that damage or cannot be read by your equipment. 1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the “Right of Replacement or Refund” described in paragraph 1.F.3, the Project Gutenberg Literary Archive Foundation, the owner of the Project Gutenberg-tm trademark, and any other party distributing a Project Gutenberg-tm electronic work under this agreement, disclaim all liability to you for damages, costs and expenses, including legal fees.   LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this electronic work within 90 days of receiving it, you can receive a refund of the money (if any) you paid for it by sending a written explanation to the person you received the work from. If you received the work on a physical medium, you must return the medium with your written explanation. The person or entity that provided you with the defective work may elect to provide a replacement copy in lieu of a refund. If you received the work electronically, the person or entity providing it to you may choose to give you a second opportunity to receive the work electronically in lieu of a refund. If the second copy is also defective, you may demand a refund in writing without further opportunities to fix the problem. 1.F.4. Except for the limited right of replacement or refund set forth in paragraph 1.F.3, this work is provided to you ‘AS-IS’ WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE. 1.F.5. Some states do not allow disclaimers of certain implied warranties or the exclusion or limitation of certain types of damages. If any disclaimer or limitation set forth in this agreement violates the law of the state applicable to this agreement, the agreement shall be interpreted to make the maximum disclaimer or limitation permitted by the applicable state law. The invalidity or unenforceability of any provision of this agreement shall not void the remaining provisions. 1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark owner, any agent or employee of the Foundation, anyone providing copies of Project Gutenberg-tm electronic works in accordance with this agreement, and any volunteers associated with the production, promotion and distribution of Project Gutenberg-tm electronic works, harmless from all liability, costs and expenses, including legal fees, that arise directly or indirectly from any of the following which you do or cause to occur: (a) distribution of this or any Project Gutenberg-tm work, (b) alteration, modification, or additions or deletions to any Project Gutenberg-tm work, and (c) any Defect you cause. Section 2. Information about the Mission of Project Gutenberg-tm Project Gutenberg-tm is synonymous with the free distribution of electronic works in formats readable by the widest variety of computers including obsolete, old, middle-aged and new computers. It exists because of the efforts of hundreds of volunteers and donations from people in all walks of life. Volunteers and financial support to provide volunteers with the assistance they need, are critical to reaching Project Gutenberg-tm’s goals and ensuring that the Project Gutenberg-tm collection will remain freely available for generations to come. In 2001, the Project Gutenberg Literary Archive Foundation was created to provide a secure and permanent future for Project Gutenberg-tm and future generations. To learn more about the Project Gutenberg Literary Archive Foundation and how your efforts and donations can help, see Sections 3 and 4 and the Foundation web page at http://www.pglaf.org. Section 3. Information about the Project Gutenberg Literary Archive Foundation The Project Gutenberg Literary Archive Foundation is a non profit 501(c)(3) educational corporation organized under the laws of the state of Mississippi and granted tax exempt status by the Internal Revenue Service. The Foundation’s EIN or federal tax identification number is 64-6221541. Its 501(c)(3) letter is posted at http://pglaf.org/fundraising. Contributions to the Project Gutenberg Literary Archive Foundation are tax deductible to the full extent permitted by U.S. federal laws and your state’s laws. The Foundation’s principal office is located at 4557 Melan Dr. S. Fairbanks, AK, 99712., but its volunteers and employees are scattered throughout numerous locations. Its business office is located at 809 North 1500 West, Salt Lake City, UT 84116,<PHONE_NUMBER>, email<EMAIL_ADDRESS>Email contact links and up to date contact information can be found at the Foundation’s web site and official page at http://pglaf.org For additional contact information: Dr. Gregory B. Newby Chief Executive and Director<EMAIL_ADDRESS>Section 4. Information about Donations to the Project Gutenberg Literary Archive Foundation Project Gutenberg-tm depends upon and cannot survive without wide spread public support and donations to carry out its mission of increasing the number of public domain and licensed works that can be freely distributed in machine readable form accessible by the widest array of equipment including outdated equipment. Many small donations ($1 to $5,000) are particularly important to maintaining tax exempt status with the IRS. The Foundation is committed to complying with the laws regulating charities and charitable donations in all 50 states of the United States. Compliance requirements are not uniform and it takes a considerable effort, much paperwork and many fees to meet and keep up with these requirements. We do not solicit donations in locations where we have not received written confirmation of compliance. To SEND DONATIONS or determine the status of compliance for any particular state visit http://pglaf.org While we cannot and do not solicit contributions from states where we have not met the solicitation requirements, we know of no prohibition against accepting unsolicited donations from donors in such states who approach us with offers to donate. International donations are gratefully accepted, but we cannot make any statements concerning tax treatment of donations received from outside the United States. U.S. laws alone swamp our small staff. Please check the Project Gutenberg Web pages for current donation methods and addresses. Donations are accepted in a number of other ways including checks, online payments and credit card donations. To donate, please visit: http://pglaf.org/donate Section 5. General Information About Project Gutenberg-tm electronic works. Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support. Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. Most people start at our Web site which has the main PG search facility: http://www.gutenberg.org This Web site includes information about Project Gutenberg-tm, including how to make donations to the Project Gutenberg Literary Archive Foundation, how to help produce our new eBooks, and how to subscribe to our email newsletter to hear about new eBooks.


A step-up test for genetic rare variants in a gene or in a pathway. The method determines an optimal grouping of rare variants analytically. The method has been described in Hoffmann TJ, Marini NJ, and Witte JS (2010) <doi:10.1371/journal.pone.0013584>.
| Version: | 0.4-2 |
| Published: | 2018-04-18 |
| Author: | Thomas Hoffmann |
| Maintainer: | Thomas Hoffmann <tjhoffm at gmail.com> |
| License: | GPL-2 | GPL-3 [expanded from: GPL] |
| URL: | http://sites.google.com/site/thomashoffmannproject/ https://doi.org/10.1371/journal.pone.0013584 |
| NeedsCompilation: | yes |
| CRAN checks: | thgenetics results |
| Reference manual: | thgenetics.pdf |
| Package source: | thgenetics_0.4-2.tar.gz |
| Windows binaries: | r-devel: thgenetics_0.4-2.zip, r-release: thgenetics_0.4-2.zip, r-oldrel: thgenetics_0.4-2.zip |
| OS X binaries: | r-release: thgenetics_0.4-2.tgz, r-oldrel: thgenetics_0.4-2.tgz |
| Old sources: | thgenetics archive |
Please use the canonical form https://CRAN.R-project.org/package=thgenetics to link to this page.


--- layout: post title: "REST implies Content Negotiation" description: "If you're building REST APIs, you will eventually have to deal with Content Negotiation." date: 2015-06-22 9:10 UTC tags: [Services, REST] --- {% include JB/setup %}
{{ page.description }}
Some REST services support both JSON and XML, in which case it's evident that Content Negotiation is required. These days, though, more and more services forego XML, and serve only JSON. Does that mean that Content Negotiation is no longer relevant?
If you're building level 3 REST APIs this isn't true. You'll still need Content Negotiation in order to be able to evolve your service without breaking existing clients.
In a level 3 API, the distinguishing feature is that the service exposes Hypermedia Controls. In practice, it means that representations also contain links, like in this example:
{ "users": [ { "displayName": "Jane Doe", "links": [ { "rel": "user", "href": "/users/1234" }, { "rel": "friends", "href": "/users/1234/friends" } ] }, { "displayName": "John Doe", "links": [ { "rel": "user", "href": "/users/5678" }, { "rel": "friends", "href": "/users/5678/friends" } ] } ] }
This representation gives you a list of users. Notice that each user has an array of links. One type of link, identified by the relationship type "user", will take you to the user resource. Another link, identified by the relationship type "friends", will take you to that particular user's friends: another array of users.
When you follow the "user" link for the first user, you'll get this representation:
{ "displayName": "Jane Doe", "address": { "street": "Any Boulevard 42", "zip": "12345 Anywhere" } }
This user representation is richer, because you also get the user's address. (In a real API, this representation should also have links, but I omitted them here in order to make the example more concise.)
As long as you have no breaking changes, all is good. Things change, though, and now you discover that a user can have more than one address:
{ "displayName": "Jane Doe", "addresses": [ { "street": "Any Boulevard 42", "zip": "12345 Anywhere" }, { "street": "Some Avenue 1337", "zip": "67890 Nowhere" } ] }
This is a breaking change. If the service returns this representation to a client that expects only a single "address" property, that client will break.
How can you introduce this new version of a user representation without breaking old clients? You'll need to keep both the old and the new version around, and return the old version to the old clients, and the new version to new clients.
There are various suggested ways to version REST APIs. Some people suggest including the version in the URL, so that you'd be able to access the new, breaking representation at "/users/v2/1234"
, while the original representation is still available at "/users/1234"
. There are several problems with this suggestion; the worst is that it doesn't work well with Hypermedia Controls (links, if you recall).
Consider the list of users in the first example, above. Each user has some links, and one of the links is a "user" link, which will take the client to the original representation. This can never change: if you change the "user" links to point to the new representation, you will break old clients. You also can't remove the "user" links, for the same reason.
The only way out of this conundrum is to add another link for the new clients:
{ "users": [ { "displayName": "Jane Doe", "links": [ { "rel": "user", "href": "/users/1234" }, { "rel": "userV2", "href": "/users/v2/1234" }, { "rel": "friends", "href": "/users/1234/friends" } ] }, { "displayName": "John Doe", "links": [ { "rel": "user", "href": "/users/5678" }, { "rel": "userV2", "href": "/users/v2/5678" }, { "rel": "friends", "href": "/users/5678/friends" } ] } ] }
In this way, old clients can still follow "user" links, and updated clients can follow "userV2" links.
It may work, but isn't nice. Every time you introduce a new version, you'll have to add new links in all the places where the old link appears. Imagine the 'link bloat' when you have more than two versions of a resource:
{ "users": [ { "displayName": "Jane Doe", "links": [ { "rel": "user", "href": "/users/1234" }, { "rel": "userV2", "href": "/users/v2/1234" }, { "rel": "userV3", "href": "/users/v3/1234" }, { "rel": "userV4", "href": "/users/v4/1234" }, { "rel": "userV5", "href": "/users/v5/1234" }, { "rel": "friends", "href": "/users/1234/friends" }, { "rel": "friendsV2", "href": "/users/1234/V2/friends" } ] }, { "displayName": "John Doe", "links": [ { "rel": "user", "href": "/users/5678" }, { "rel": "userV2", "href": "/users/v2/5678" }, { "rel": "userV3", "href": "/users/v3/5678" }, { "rel": "userV4", "href": "/users/v4/5678" }, { "rel": "userV5", "href": "/users/v5/5678" }, { "rel": "friends", "href": "/users/5678/friends" }, { "rel": "friendsV2", "href": "/users/5678/V2/friends" } ] } ] }
Remember: we're talking about Level 3 REST APIs here. Clients must follow the links provided; clients are not expected to assemble URLs from templates, as will often be the case in Level 1 and 2.
As is often the case, the root cause of the above problem is coupling. The attempted solution of putting the version in the URL couples the identity (the URL) of the resource to its representation. That was never the intent of REST.
Instead, you should use Content Negotiation to version representations. If clients don't request a specific version, the service should return the original representation.
New clients that understand the new representation can explicitly request it in the Accept header:
GET /users/1234 HTTP/1.1 Accept: application/vnd.ploeh.user+json; version=2
Jim Liddell has a more detailed description of this approach to versioning.
It enables you to keep the user list stable, without link bloat. It'll simply remain as it was. This means less work for you as API developer, and fewer bytes over the wire.
The most common criticisms against using Content Negotiation for versioning is that it makes the API less approachable. The argument goes that with version information in the URL, you can still test and explore the API using your browser. Once you add the requirement that HTTP headers should be used, you can no longer test and explore the API with your browser.
Unless the API in question is an anonymously accessible, read-only API, I think that this argument misses the mark.
Both Level 2 and 3 REST APIs utilise HTTP verbs. Unless the API is a read-only API, a client must use POST, PUT, and DELETE as well as GET. This is not possible from a browser.
Today, many APIs are secured with modern authentication and authorisation formats like OAuth, where the client has to provide a security token in the Authorization header. This is not possible from a browser.
Most APIs will already be impossible to test from the browser; it's irrelevant that versioning via the Accept header also prevents you from using the browser to explore and test the API. Get friendly with curl or Fiddler instead.
If you want to build a true REST API, you should seriously consider using Content Negotiation for versioning. In this way, you prevent link bloat, and effectively decouple versioning from the identity of each resource.
If you've said REST, you must also say Content Negotiation. Any technology you use to build or consume REST services must be able to play that game.
Comments
For that example, it's only a breaking change because you also removed the old "address" property. It might have been easier to leave that in and populate it with the first address from the collection. Older clients could continue to use that, and newer ones could use the new "addresses" field. Obviously at some point you will need to deal with versioning, but it can be better to avoid it until absolutely necessary.
I've been catching up on REST, and discovered the 5 levels of media type just a few minutes before reading your post. This keeps it approachable, you can still use your browser to explore, and the higher levels progressively enhance the API for smarter clients.
An example can be found here where Ali Kheyrollahi exposes Greg Young's CQRS sample though a REST inferface.
Graham, thank you for writing. You are completely right: if it's possible to evolve the API without introducing a new version, that's always preferable. Your suggestion for doing that with my particular example demonstrates how it could be done.
As you also correctly point out, sooner or later, one will have to deal with a truly breaking change. My purpose of writing this article was to explain how the need to do that implies that content negotiation is required. This is the reason I made up an example of a breaking change; unfortunately, that example didn't convince you that versioning was necessary ;)
I think I would consider going one step further, and mandate a version in the Accept header right from the beginning.
i.e.,
Accept: application/json
would return a 406 Not Acceptable HTTP response. You have to useAccept: application/vnd.ploeh.user+json; version=1
Forces clients to be upgrade friendly to begin with, and easier to retire old versions when they are not being called any more.
It strikes me though, that having to know these MIME types for versioning is a bit like needing to know the right incantation to open the magic door. We don't want clients hard-coding the URL to a particular API call as part of HATEOAS, but still need to know the magic MIME type to get an appropriate version of the data.
Evan, thank you for writing. As I also wrote in a comment to Jim Liddel's article, I would consider the context before making any hard rules. If you control both API and all clients, requiring specific Accept headers may make managing the entire ecosystem a little easier.
On the other hand, if you make an API available to arbitrary clients, you should follow Postel's law in order to make it easy for client developers to use your API.
Ultimately, even if you can somehow solve the problem of not having to know specific MIME types, you'll still need to know how to interpret the representations served by the API. For example, as a client developer, you still need to know that a user representation will have
displayName
andaddress
properties. As far as I can see, you can push that problem around, but if it can be solved, I've yet to learn how.Mark, I've been doing some preliminary research on API versioning for a personal project and I like this approach. Thanks for the post and accompanying links!
I read a few of Jim Liddel's posts and can see that Nancy has this sort of content negotiation baked in. Being more familiar with Web Api, I've been looking for an existing way of doing this using that framework instead. Web Api's support for attribute routing seems promising, but as of yet, I haven't seen any examples of this in action using Web Api 2. The flexibility and simplicity of Nancy is really attractive, and I may end up going that route anyway, but I'm hesitant to pick a framework based solely on something like this. Have you come across anything similar for Web API 2?
Ben, thank you for writing.  Out of the box it supports XML and JSON, but you can also make it support Content Negotiation-based versioning as described in this article.


by Eduardo Silva / @edsiper
Duda I/O is an event-driven C framework
for the creation of High Performance Web Services.
Due to it flexible architecture it supports many features such as HTTP(s), Websockets, JSON, SQLite, Redis and others.


AnotherWHSList.org
Explore
About
Search...
Uh oh!...
This site doesn't work with IE6
Please, update your browser and come back.


YBUR
code learn.
A concept is a brick. It can be used to build a courthouse of reason. Or it can be thrown through the window.
Is your dog like the Budha?
Are all the base belong to thou, the state, the gods, or the damned?
Do you want to learn?
Type your code in here, and paste it into the evaluator
.


{{#partial "page"}}
Refrigerators, dishwashers, stoves, ovens—name it! King’s Great Buys offers a wide selection of appliances from your most favorite brands.
Equip your kitchen with top-of-the-line stoves, refrigerators, ovens, and other cooking necessities.
Do your laundry with the most reliable washers and dryers or a combination of both.
From large, heavy-duty appliances to soft, comfy beddings, King’s Great Buys offers ways to make your life incredibly easier while having some spare change left. Now that’s shopping the savings!
Our wide selection of durable appliances gives you the freedom to choose which brand you prefer. We carry household names such as Samsung, LG, Whirlpool, Bosch, and Electrolux.


Manage Your Sites & Clients. Free 24/7 Support. Sign Up Today! 24/7 Phone & Chat Support. Lowest Industry Prices. World's Largest Inventory. 76M+ Domains Managed. Services: Domain Names, Web Hosting, Website Builder, Email Addresses, Web Security.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Minus doloribus commodi quam quis accusamus quos?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Minus doloribus commodi quam quis accusamus quos?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Minus doloribus commodi quam quis accusamus quos?


Ayushmann Khurrana wishes brother Aparshakti with the sweetest message
by FilmfareActor Aparshakti Khurana who turns a year older today is spending his birthday while shooting for his upcoming film. Talking about his birthday plans, he said, "I believe that birthdays should be spent doing what you love and I love working. My wife Aakriti will be coming to Ludhiana on the shoot location, so that makes my birthday perfect. I will be doing what I love and being with people who I love. I cannot ask for more.”
While away from the birthday boy, brother Ayushmann Khurrana still managed to find a special way to wish the actor with a picture from his childhood with a sweet message that read, “You’re the world’s best brother. And I wanted to show this picture of yours to the world, where you are trying to mimic Raj Kapoor saab of Shri 420. (Mera joota hai jaapaani)”
On the work front, Aparshakti will be seen in Pati Patni Aur Woh directed by Mudassar Aziz. The film which is a remake of the 1978 film with the same name is scheduled to release on December 6.


Elisyam Documentation
Introduction
Elisyam is the complete package that was built to help you create a custom and unique user interface for your project.
With Elisyam you’re not limited to creating a single page for your admin panel. You’ll have over many pre-built page templates to choose from, covering many popular scenarios and content types. Like the main admin demos, all the page templates are highly customizable.
You can add any of the pre-built UI elements to your design. The options are vast, with elements including buttons, badges, widgets, timeline, modals, progress bars, and more. They can all be customized to ensure they fit in or contrast with the rest of your dashboard as desired.
Elisyam is packed with pages that come complete with documented code to simplify the customization process.
Author: Saerox
Elisyam supports all modern browsers (Chrome, Firefox, Safari) including Edge.
Installation
Elisyam is a simple static HTML template so it's simple to install it.
Just simple steps to follow:
HTML Files + assets
Folder Structure
HTML
├── assets
| └── css
| | └── all css files
| |
| └── icons
| | └── all icons files
| |
| └── img
| | └── all img files
| |
| └── js
| | └── all javascript files
| |
| └── vendors
| └── all vendors css/javascript files
|
└── all html files
Dark Version
All pages of Eisyam are available in dark version.
Just change the name of the css file: elisyam-1.0.css
by elisyam-1.0-dark.css
.
Same thing for javascript files: file.js
by file-dark.js
.
Add .min for minified files.
Fonts
We used google fonts, so you can change them easily.

Default Fonts: Montserrat and Noto Sans
Icons
LineAwesome -
Themify -
Ionicons -
Meteocons -
Widgets
Basic widget structure

Widget Header

Content Body

Content Footer

Widget Header With Border

Widget Header With Border

Widget Header No Border

Widget Header No Border

Widget Header With Border

<button type="button" id="actions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="dropdown-toggle">

</button>

Options 1

Options 2

Options 3

Widget Header With Button

Widget Header With Border

<button type="button" class="btn btn-primary">Button 1</button>
<button type="button" class="btn btn-primary">Button 2</button>

Music Player
assets > js > music > music-player.js
You can add multiple files, to change just press the previous and next buttons on the player.
Some examples below:
songs = [{
src: "folder/Song Example.mp3", // mp3 file
title: "Artist/Group Name - Song Name", // Title
coverart: "assets/img/music/img.jpg" // Image
}, {
src: "folder/song example.mp3",
title: "Artist/Group Name - Song Name",
coverart: "assets/img/music/img.jpg"
}, {
src: "folder/song-example.mp3",
title: "Artist/Group Name - Song Name",
coverart: "assets/img/music/img.jpg"
}, ];
Utilities
Text Color
| Class | Results |
|---|---|
.text-primary |
Lorem ipsum dolor sit amet consectecur. |
.text-secondary |
Lorem ipsum dolor sit amet consectecur. |
.text-success |
Lorem ipsum dolor sit amet consectecur. |
.text-info |
Lorem ipsum dolor sit amet consectecur. |
.text-warning |
Lorem ipsum dolor sit amet consectecur. |
.text-danger |
Lorem ipsum dolor sit amet consectecur. |
.text-gradient-01 |
Lorem ipsum dolor sit amet consectecur. |
.text-gradient-02 |
Lorem ipsum dolor sit amet consectecur. |
.text-gradient-03 |
Lorem ipsum dolor sit amet consectecur. |
.text-gradient-04 |
Lorem ipsum dolor sit amet consectecur. |
.text-gradient-05 |
Lorem ipsum dolor sit amet consectecur. |
.text-dark |
Lorem ipsum dolor sit amet consectecur. |
Background Color
| Class | Results |
|---|---|
.bg-primary |
|
.bg-secondary |
|
.bg-success |
|
.bg-info |
|
.bg-warning |
|
.bg-danger |
|
.bg-dark |
|
.bg-white |
|
.bg-gradient-01 |
|
.bg-gradient-02 |
|
.bg-gradient-03 |
|
.bg-gradient-04 |
|
.bg-gradient-05 |
References
Text Color
| Term | Website |
|---|---|
| Animate | https://daneden.github.io/animate.css/ |
| Bootstrap | https://getbootstrap.com |
| Bootstrap Select | https://github.com/VinceG/twitter-bootstrap-wizard |
| Bootstrap Wizard | https://github.com/VinceG/twitter-bootstrap-wizard |
| Chart Js | https://www.chartjs.org/ |
| Circle Progress | https://kottenator.github.io/jquery-circle-progress/ |
| Countdown | https://hilios.github.io/jQuery.countdown/ |
| Full Calendar | https://fullcalendar.io/ |
| Google Fonts | https://fonts.google.com/ |
| Ionicons | https://ionicons.com/ |
| Leaflet | https://leafletjs.com/ |
| LineAwesome | https://icones8.fr/line-awesome |
| Lity | https://sorgalla.com/lity/ |
| Meteocons | https://www.alessioatzeni.com/meteocons/ |
| Nicescroll | https://nicescroll.areaaperta.com/ |
| Noty | https://ned.im/noty/#/ |
| Owl Carousel 2 | https://owlcarousel2.github.io/OwlCarousel2/index.html |
| Shutterstock | https://www.shutterstock.com/ |
| Themify | https://themify.me/themify-icons |
| Unsplash | https://unsplash.com/ |