").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),!c.settings.submitHandler||(e=c.settings.submitHandler.call(c,c.currentForm,b),d&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(null!=j&&(!j.form&&j.hasAttribute("contenteditable")&&(j.form=this.closest("form")[0],j.name=this.attr("name")),null!=j.form)){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(a,b){i[b]=f[b],delete f[b]}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g)),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr.pseudos||a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){!this.form&&this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=a(this).attr("name"));var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)void 0!==a[b]&&null!==a[b]&&a[b]!==!1&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=d),!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type;return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=b.hasAttribute("contenteditable")?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f,g=a(b).rules(),h=a.map(g,function(a,b){return b}).length,i=!1,j=this.elementValue(b);if("function"==typeof g.normalizer?f=g.normalizer:"function"==typeof this.settings.normalizer&&(f=this.settings.normalizer),f){if(j=f.call(b,j),"string"!=typeof j)throw new TypeError("The normalizer should return a string value.");delete g.normalizer}for(d in g){e={method:d,parameters:g[d]};try{if(c=a.validator.methods[d].call(this,j,b,e.parameters),"dependency-mismatch"===c&&1===h){i=!0;continue}if(i=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(k){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",k),k instanceof TypeError&&(k.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),k}}if(!i)return this.objectLength(g)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for "+b.name+""),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.submitButton&&a("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a});!function(e){var n;if("function"==typeof define&&define.amd&&(define(e),n=!0),"object"==typeof exports&&(module.exports=e(),n=!0),!n){var t=window.Cookies,o=window.Cookies=e();o.noConflict=function(){return window.Cookies=t,o}}}(function(){function e(){for(var e=0,n={};e
Các nhà cung cấp dịch vụ điện toán đám mây phổ biến nhất hiện nay? Ưu và nhược điểm nào cần lưu ý ? Bài viết này chính là những gì bạn cần!
Mục lục
Mục lục
Điện toán đám mây là việc phân phối các tài nguyên CNTT theo nhu cầu qua Internet với chính sách thanh toán theo mức sử dụng. Bạn thường chỉ trả tiền cho các dịch vụ đám mây mà bạn sử dụng thay vì chi phí cho phần cứng, cơ sở dữ liệu, máy chủ, giấy phép phần mềm. Bài viết sau đây sẽ tổng hợp top các dịch vụ điện toán đám mây tốt nhất hiện nay để bạn có thể chọn lựa, cùng bắt đầu ngay nhé!
Dịch vụ điện toán đám mây
1. Microsoft (MS Azure) – Dịch vụ điện toán đám mây tốt nhất
Dịch vụ điện toán đám mây MS Azure
Phân khúc Đám mây Thông minh của Tập đoàn Microsoft bao gồm Azure, nhà cung cấp dịch vụ điện toán đám mây lớn thứ hai trên toàn cầu. Microsoft Azure hiện có 60 vùng và 116 vùng khả dụng đang hoạt động.
Hơn 200 trung tâm dữ liệu Microsoft Azure vật lý được đặt trên toàn thế giới, nơi chứa các máy chủ. Công ty kết nối cơ sở hạ tầng trung tâm dữ liệu này với hơn 175.000 dặm đường cáp quang trên 140 quốc gia.
Ưu điểm:
Cung cấp tính khả dụng và dự phòng cao trong các trung tâm dữ liệu trên phạm vi toàn cầu. Do đó, Azure có thể đưa ra thỏa thuận mức độ dịch vụ, hay SLA, là 99,95% (khoảng 4,38 giờ ngừng hoạt động mỗi năm), điều mà hầu hết các doanh nghiệp không thể đạt được.
Microsoft Azure giúp dễ dàng tăng hoặc giảm quy mô hoạt động và lưu trữ chỉ bằng một lần bấm nút.
Tập trung mạnh vào bảo mật, tuân theo mô hình bảo mật tiêu chuẩn: phát hiện, đánh giá, chẩn đoán, ổn định.
Nhược điểm:
Azure yêu cầu trình độ chuyên môn về nền tảng để đảm bảo tất cả các bộ phận chuyển động hoạt động hiệu quả cùng nhau.
Giá cả: Trả theo mức sử dụng.
2. Amazon Web Service (AWS)
Dịch vụ điện toán đám mây Amazon Web Services (AWS)
Amazon Web Services (AWS), là nhà cung cấp dịch vụ điện toán đám mây lớn nhất toàn cầu. Từ các trung tâm dữ liệu của mình, doanh nghiệp cung cấp hơn 200 dịch vụ đầy đủ tính năng bao gồm điện toán, lưu trữ và cơ sở dữ liệu.
AWS hiện có 26 vùng và 84 vùng khả dụng đang hoạt động. Đồng thời, công ty đã ra mắt hàng nghìn dịch vụ AWS mới, điều này cũng đã thúc đẩy quá trình mở rộng của công ty.
Ưu điểm:
Linh hoạt, cho phép bạn sử dụng các hệ điều hành, ngôn ngữ lập trình và nền tảng ứng dụng web mà bạn cảm thấy thoải mái.
Khả năng mở rộng tự động: tự động tăng dung lượng của các tài nguyên bị hạn chế theo yêu cầu để ứng dụng luôn sẵn sàng. Dễ dàng tạo ra các máy chủ mới trong AWS.
Hiệu suất cao
Nhược điểm:
Lỗi có thể xảy ra trong một số tích hợp nguồn dữ liệu và cơ sở hạ tầng cơ bản.
Hạn chế liên quan đến EC2 và bảo mật. Các công ty đang sử dụng AWS sẽ có tài nguyên mặc định để sử dụng, nhưng vấn đề xảy ra khi giới hạn tài nguyên mặc định khác nhau giữa các khu vực.AWS áp đặt giới hạn tài nguyên theo mặc định, giới hạn này khác nhau tùy theo khu vực. Bạn chỉ có thể khởi chạy một số phiên bản nhất định trên mỗi khu vực
Giá cả: Trả theo mức sử dụng
3. Google Cloud Platform (GCP) – Dịch vụ điện toán đám mây lớn thứ 3 toàn cầu
Dịch vụ Google Cloud Platform
Google Cloud Platform (GCP) là nhà cung cấp dịch vụ điện toán đám mây lớn thứ ba trên toàn cầu dành cho doanh nghiệp. GCP cho phép các nhà phát triển xây dựng, thử nghiệm và triển khai các ứng dụng trên cơ sở hạ tầng phân tán và có thể mở rộng của nó, đồng thời sử dụng các khả năng của dịch vụ về bảo mật, quản lý dữ liệu, phân tích và trí tuệ nhân tạo (AI).
Ưu điểm:
Năng suất cao: Các ứng dụng Google Cloud có thể xử lý hàng chục nghìn người dùng cùng một lúc mà không bỏ lỡ một nhịp nào.
Bảo mật mạnh mẽ: Bảo mật đằng sau ứng dụng Google Cloud của bạn được hơn 500 chuyên gia hỗ trợ suốt ngày đêm và là kết quả của hàng thập kỷ nghiên cứu và phát triển.
Dữ liệu lớn: Google Cloud Platform có nhiều công cụ cải tiến để lưu trữ trên đám mây như BigQuery và các công cụ xử lý dữ liệu theo thời gian thực như Google Cloud Dataflow.
Nhược điểm:
Chi phí cao, dịch vụ lưu trữ đám mây Google Cloud đắt hơn nhiều so với dịch vụ lưu trữ truyền thống
Sự phụ thuộc của Google Cloud vào bên thứ ba có thể không lý tưởng đối với một số người dùng đám mây.
Giá cả: $300 cho gói dùng thử. Thanh toán theo mức sử dụng.
4. Oracle
Oracle Cloud
Các dịch vụ điện toán đám mây của Tập đoàn Oracle bao gồm Dịch vụ Phần mềm Đám mây của Oracle (SaaS) và Cơ sở hạ tầng Đám mây của Oracle (OCI). Thông qua OCI, công ty là nhà cung cấp dịch vụ đám mây, cung cấp các công nghệ cơ sở hạ tầng dưới dạng dịch vụ bao gồm các dịch vụ điện toán, lưu trữ và kết nối mạng. Oracle Cloud hiện có 38 vùng và 46 vùng khả dụng đang hoạt động.
Ưu điểm:
Dịch vụ này có thể được sử dụng trong các tổ chức bao gồm cả các doanh nghiệp vừa và nhỏ. Hệ thống của Oracle Cloud mang đến sự tự động hóa và dễ dàng cho doanh nghiệp.
Giao diện người dùng dễ sử dụng cho người mới bắt đầu. Ngoài ra, mức độ bảo mật và truy vấn nhanh cũng là một lợi thế khác.
Nhược điểm:
Sẽ tốt hơn nếu Oracle Cloud tăng dung lượng lưu trữ và tốc độ truyền dữ liệu.
Oracle Cloud cũng tập trung vào cung cấp danh mục ứng dụng sâu rộng và phong phú cho máy chủ cấp cao (High-end servers) cao cấp, vì vậy những gì nó cung cấp cho máy chủ cấp thấp (Low-end servers) có thể khá hạn chế. Ngoài ra, Oracle Cloud có hiệu suất kém khi nói đến các giải pháp dựa trên .NET.
Giá cả:
$300 cho gói dùng thử để sử dụng trên tất cả các dịch vụ Cơ sở hạ tầng đám mây Oracle đủ điều kiện trong tối đa 30 ngày.
Ngoài ra, các gói giá khác nhau bắt đầu từ $ 0,0980 mỗi giờ.
5. VMware Cloud
Dịch vụ điện toán đám mây VMware
Dịch vụ điện toán đám mây VMware Cloud cho phép bạn tích hợp, quản lý và bảo mật các ứng dụng trên tài nguyên đám mây.
Các dịch vụ này hoạt động với bất kỳ dịch vụ đám mây nào sử dụng VMware và có thể giúp bạn quản lý và bảo trì tập trung các môi trường kết hợp hoặc nhiều đám mây. Điều này cho phép bạn chuẩn hóa bảo mật, giảm độ phức tạp trong quản lý và cải thiện chỉ số ROI Return On Investment – tỷ lệ lợi nhuận ròng trên tổng chi phí đầu tư của bạn.
Ưu điểm:
Hỗ trợ việc quản lý được tối giản và hợp lý hóa.
Loại bỏ gánh nặng quản lý cơ sở hạ tầng và kiểm soát CNTT ngoài luồng.
Một bộ tính năng tối ưu. Cho phép bạn chọn những tính năng bạn muốn và dễ dàng điều chỉnh để phù hợp với sự phát triển hoặc sửa đổi.
Không cần hệ điều hành bên ngoài cho các thành phần quản lý.
Nhược điểm:
Khá khó để học khi mới bắt đầu. Sử dụng VMware không quá dễ dàng đối với bất kỳ ai không có bất kỳ nền tảng kỹ thuật nào.
Phần mềm VMware được thiết kế để hoạt động trên các thiết bị cao cấp. Vì vậy, với điều kiện này, nếu doanh nghiệp của bạn không có hệ thống tốt nhất thì hiệu quả sẽ thấp.
Giá cả: Với VMC, bạn trả giá theo giờ cho mỗi máy chủ bạn sử dụng. Giá theo yêu cầu hàng giờ cho mỗi máy chủ là 8,36 đô la, tương đương 71.000 đô la mỗi năm cho mỗi máy chủ.
6. IBM Cloud
IBM Cloud
IBM Cloud (Kyndryl) có 11 vùng và 29 vùng khả dụng đang hoạt động. Phân khúc dịch vụ điện toán đám mây của Kyndryl giúp doanh nghiệp tối ưu hóa việc sử dụng các nhà cung cấp dịch vụ đám mây bằng cách tích hợp các dịch vụ được cung cấp từ các nhà cung cấp phần mềm độc lập, nhà cung cấp dịch vụ đám mây công cộng, nền tảng nội bộ và công nghệ như internet vạn vật (IoT).
Ưu điểm:
IBM Cloud cung cấp dịch vụ quản lý đám mây lai và dịch chuyển trên đám mây. Nó là dịch vụ đám mây mở và được quản lý.
Phần cứng được xây dựng tốt giúp lưu trữ hiệu quả
Bảo mật và mã hóa hàng đầu làm tăng độ tin cậy
Nhược điểm:
Tùy chọn máy chủ ít đa dạng hơn
Giá quá cao cho các doanh nghiệp nhỏ
Giá cả:
Gói miễn phí không giới hạn ngày, truy cập miễn phí vào hơn 40 dịch vụ.
Các gói giá có thể khác nhau tùy theo các dịch vụ đám mây khác nhau với mức giá thấp nhất $0,207 mỗi giờ
7. Alibaba Cloud
Đơn vị điện toán đám mây Alibaba
Đơn vị điện toán đám mây của Tập đoàn Alibaba, được gọi là Alibaba Cloud, là nhà cung cấp dịch vụ đám mây lớn thứ tư trên toàn cầu, nhà cung cấp đám mây chính ở Châu Á Thái Bình Dương và là nhà cung cấp dịch vụ đám mây lớn nhất ở Trung Quốc.
Thông qua Alibaba Cloud, doanh nghiệp cung cấp các dịch vụ đám mây, bao gồm điện toán linh hoạt, cơ sở dữ liệu, lưu trữ, ảo hóa mạng, điện toán quy mô lớn, bảo mật, dịch vụ quản lý & ứng dụng, phân tích dữ liệu lớn và máy học. Alibaba Cloud hiện có 27 vùng và 84 vùng khả dụng đang hoạt động.
Ưu điểm:
Alibaba Cloud nổi tiếng với cơ sở hạ tầng và phần mềm Chống DDoS cao cấp. Mặc dù hầu hết các dịch vụ chỉ cung cấp khả năng bảo vệ chống lại các cuộc tấn công DDoS ở một mức độ nhất định, nhưng Alibaba Cloud cung cấp khả năng bảo vệ toàn cầu nhờ các chính sách Kiểm soát lưu lượng truy cập toàn cầu.
Có thể di chuyển dữ liệu từ phần mềm tại chỗ sang Alibaba Cloud. Người dùng đám mây cũng có thể di chuyển các trang web thương mại điện tử của họ sang các nhà cung cấp đám mây công cộng.
Tiết kiệm chi phí.
Nhược điểm:
Tích hợp chéo cùng với công cụ tìm kiếm cần được cải thiện.
Lúc đầu, thiết lập có thể khó hiểu đối với một số người dùng đám mây.
Một số công cụ trang web của nó, chẳng hạn như tài liệu trực tuyến và công cụ tính giá, không tiên tiến như một số nhà cung cấp đám mây khác
Giá cả: Có bản dùng thử miễn phí. Gói dành cho nhà phát triển bắt đầu từ $19.
Các NCC hosting nền tảng điện toán đám mây
Hostwinds
Dịch vụ điện toán đám mây Hostwinds
Sở hữu dịch vụ hỗ trợ khách hàng trực tuyến tuyệt vời, dịch vụ điện toán đám mây Hostwinds không ngần ngại chỉ cho bạn thông tin chi tiết và giúp bạn trong suốt quá trình thiết lập, giúp trang web của bạn có thể hoạt động càng sớm càng tốt và hoạt động hiệu quả mà không bị chậm trễ.
Ưu điểm:
Đảm bảo thời gian hoạt động 99,9999%.
Nhóm kỹ thuật luôn sẵn sàng giải quyết mọi vấn đề mà bạn có thể gặp phải 24/7.
Hostwinds cung cấp chứng chỉ SSL miễn phí với cả ba gói lưu trữ được chia sẻ của họ.
Nó cung cấp cho bạn tốc độ và độ tin cậy tuyệt vời để bạn có thể có trải nghiệm lưu trữ tốt.
Nhược điểm:
Vị trí máy chủ hạn chế. Trên thực tế, chỉ có ba trung tâm dữ liệu của Hostwinds, hai trung tâm được đặt tại Hoa Kỳ và một ở Amsterdam.
Một tên miền không được bao gồm trong bất kỳ gói lưu trữ chia sẻ nào của họ và nó sẽ phải được mua riêng từ họ hoặc ở nơi khác.
Giá cả: Nó có giá khác nhau cho các giải pháp khác nhau như lưu trữ web, lưu trữ web doanh nghiệp và lưu trữ VPS dao động từ %8,99- $12,74 mỗi tháng.
Đánh giá : 4,9/5
Cloudways
Điện toán đám mây Cloudways
Cloudways cung cấp dịch vụ điện toán đám mây được quản lý cho các đại lý, cửa hàng và SMB. Trải nghiệm quyền tự do xây dựng, triển khai và quản lý các ứng dụng bao gồm PHP, Laravel, WordPress và Magento mà không yêu cầu bất kỳ kiến thức nào về quản lý máy chủ đám mây.
Cho dù người dùng là cửa hàng trực tuyến, đại lý hay nhà phát triển tự do có nhiều khách hàng, Cloudways cung cấp nhiều tính năng để giúp đạt được nhiều hơn từ giải pháp lưu trữ đám mây được quản lý cho các trang web doanh nghiệp và dự án của khách hàng.
Ưu điểm:
Đa dạng máy chủ đám mây
Không có giới hạn về số lượt truy cập và trang web bạn có.
Thời gian đáp ứng nhanh.
Nó có một giao diện người dùng trực quan, cho phép thêm các thành viên trong nhóm, giúp cộng tác dễ dàng.
Bạn có thể dễ dàng theo dõi và điều chỉnh nhiều máy chủ và ứng dụng.
Hỗ trợ khách hàng 24/7.
Nhược điểm:
Thiết lập phức tạp
Thời gian dùng thử có giới hạn
Giá cả: Nó có giá khác nhau cho các giải pháp khác nhau, chẳng hạn như lưu trữ web, lưu trữ web doanh nghiệp và lưu trữ VPS dao động từ $12- $96 một tháng.
Hostinger
Hostinger Cloud
Hostinger là một trong những công ty lưu trữ web phổ biến nhất trên thế giới. Nhà cung cấp dịch vụ điện toán đám mây lưu trữ tất cả trong một ngày sẽ đưa trải nghiệm người dùng của bạn lên một tầm cao mới bằng cách hỗ trợ bạn trong suốt quá trình với sự hỗ trợ kỹ thuật 24/7.
Tuy nhiên, hỗ trợ không phải là điểm cộng duy nhất mà bạn sẽ được cung cấp vì Panel tích hợp của Hostinger sẽ cấp cho bạn tốc độ và sự đơn giản bất cứ khi nào bạn sử dụng nền tảng dễ sử dụng này.
Ưu điểm:
Tốc độ tuyệt vời
Dễ dàng thiết lập, giao diện dễ sử dụng.
Thời gian tải ngắn, SSL miễn phí, quản lý truy cập, tối ưu hóa thương mại điện tử và di chuyển miễn phí.
Cơ sở dữ liệu không giới hạn, tài nguyên chuyên dụng, băng thông không giới hạn và địa chỉ IP chuyên dụng.
Công ty sẽ hoàn trả khoản thanh toán của bạn trong vòng 30 ngày kể từ ngày đăng ký nếu bạn không hài lòng với dịch vụ.
Nhược điểm:
Một số cấu hình nâng cao không khả dụng.
Mặc dù Hostinger cung cấp bảo đảm hoàn lại tiền trong 30 ngày, điều này không nhất thiết có nghĩa là mọi thứ sẽ được hoàn lại. Ví dụ: đăng ký tên miền chỉ có thể được hoàn lại nếu bị hủy trong vòng bốn ngày kể từ ngày đăng ký. Ngoài ra, bảo vệ quyền riêng tư, gia hạn tên miền và phí mua lại không được hoàn lại.
Giá cả: Nó có giá khác nhau cho các giải pháp khác nhau, chẳng hạn như lưu trữ web, lưu trữ đám mây và lưu trữ VPS với mức giá dao động từ $1,39- $77,99 mỗi tháng.
Hostinger giảm giá khá lớn cho các gói của mình so với giá thông thường. Tuy nhiên, một điều cần lưu ý là những mức giá chiết khấu này chỉ dành cho khách hàng mới và giá thông thường sẽ có hiệu lực sau khi kỳ đầu tiên kết thúc. Dịch vụ điện toán đám mây dần trở nên phổ biến và được sử dụng rộng rãi hơn trong các Doanh nghiệp vì những tiện ích khổng lồ mang lại. TOTHOSThy vọng top các dịch vụ điện toán đám mây cùng những đánh giá chi tiết về ưu, nhược điểm đã giúp bạn chọn lựa được nhà cung cấp phù hợp với nhu cầu.
Hiện nay, công nghệ trí tuệ nhân tạo đang bùng nổ mạnh mẽ tạo ra những tiềm năng to lớn trong nhiều lĩnh vực trong cuộc sống. Để làm được điều đó thì không thể thiếu AI tạo sinh (Generative AI). Vậy, Gen AI là gì? Nó có đóng góp gì trong thực tiễn? Hãy cùng tìm hiểu qua bài viết này nhé!
Cụm từ “đứt cáp quang biển” hay “cá mập cắn cáp” thường được nhắc tới mỗi khi kết nối mạng Việt Nam với quốc tế gặp vấn đề. Vậy cáp quang biển là gì? Việt Nam hiện tại đang có bao nhiêu tuyến cáp quang? Cùng TotHost tìm hiểu nhé!
Hiện nay trí tuệ nhân tạo đang là một chủ đề rất “nóng”, kèm theo đó là sự ra mắt của hàng loạt công cụ AI hữu ích nhưng mặt trái là tội phạm mạng có thể nguỵ trang phần mềm độc hại gắn mác “trí tuệ nhân tạo” để đánh lừa người dùng.
Khi tìm hiểu về lĩnh vực phần mềm bạn sẽ được tiếp cận với GitLab - một công cụ không thể thiếu với các đội nhóm phát triển dự án. Hãy cùng TotHost đào sâu thông tin về nền tảng này nhé!
Khi sử dụng Linux, bạn đã biết cách xem danh sách người dùng hiện đang đăng nhập chưa? Làm thế nào để tìm ra người dùng đăng nhập bằng cửa sổ terminal? Hãy cùng tìm hiểu thông qua bài viết này của TotHost nhé!
Việc nắm được mức độ sử dụng tài nguyên trên hệ thống của bạn là rất quan trọng bởi thông tin này có thể giúp bạn quản lý hệ thống tốt hơn. Điều này thể hiện rõ ở khâu xác định vấn đề của hiệu xuất và cách tối ưu hoá hệ thống. Hãy cùng TotHost tìm hiểu về cách kiểm tra ứng dụng đang chiếm nhiều bộ nhớ trong Linux.