At the time of writing this post, default ASP.NET Core SPA templates allow you to create Angular 5 based app with Visual Studio without installing any third-party extensions or templates. Angular 6 is out now and you can also upgrade the Angular 5 app to Angular 6 . What if you want to create Angular 6 app with VS 2017? This post talks about how to create an Angular 6 App with Visual Studio 2017 and how to extend it with a simple example.
کتاب کار با XML در SQL Server
Stairway to XML
XML has been part of the SQL Standard since 2003, and is essential for
any DBA because so many of the dynamic management views return XML data.
Now that the industry is more used to data defined by document markup,
it is becoming more important than ever for Database Developers and DBAs
to understand the technology and to know where it makes sense to use
XML. In this book, originally a series of articles on
SQLServerCentral.com, Robert Sheldon flexes his talent to make the
complicated seem simple.
سری آموزشی Bash Scripting در لینوکس
Bash Scripting on Linux
The Bash Scripting Essentials series will teach you everything you need to know in order to write effective bash scripts in Linux. The series starts with some introductory concepts, with each episode building on the last. By the end of this series, you'll be able to write your own bash scripts! The Bash Scripting series was one of the very first tutorial series on Learn Linux TV ever, so it's basically where it all started. Now, it's been remade and brought into the modern age. The new version of this series covers everything the original version did, with additional concepts added throughout.
Memento یک الگوی طراحی مفید و ساده است که برای ذخیره و بازیابی state یک object استفاده میشود. در بعضی از مقالات از آن به عنوان snapshot نیز یاد شده است! اگر با git کار کرده باشید، این مفهوم را میتوان در git بسیار یافت؛ هر commit به عنوان یک snapshot میباشد که میتوان به صورت مکرر آن را undo کرد و یا مثال خیلی سادهتر میتوان به ctrl+z در سیستم عامل اشاره کرد.
به مثال زیر توجه کنید:
Int temp; Int a=1; temp=a; a=2; . . a=temp;
شما قطعا در برنامه نویسی با کد بالا زیاد برخورد داشتهاید و آنرا به صورت مکرر انجام دادهاید. کد بالا را در قالب یک object بیان میکنیم. به مثال زیر توجه کنید:
int main() { MyClass One = new MyClass(); MyClass Temp = new MyClass(); // Set an initial value. One.Value = 10; One.Name = "Ten"; // Save the state of the value. Temp.Value = One.Value; Temp.Name = One.Name; // Change the value. One.Value = 99; One.Name = "Ninety Nine"; // Undo and restore the state. One.Value = Temp.Value; One.Name = Temp.Name; }
در کد بالا با استفاده از یک temp، شیء مورد نظر را ذخیره کرده و در آخر مجدد دادهها را درون شیء، restore میکنیم.
از مشکلات کد بالا میتوان گفت :
۱- برای هر object باید یک شیء temp ایجاد کنیم.
۲- ممکن است بخواهیم که حالات یک object را بر روی هارد ذخیره کنیم. با روش فوق کدها خیلی پیچیدهتر خواهند شد.
۳- نوشتن کد به این سبک برای پروژههای بزرگ، پیچیده و مدیریت آن سختتر میشود.
پیاده سازی memento
ما این مثال را در قالب یک پروژه NET Core onsole. ایجاد میکنیم. برای این کار یک پوشهی جدید را ایجاد و درون ترمینال دستور زیر را وارد کنید:
dotnet new console
روشهای زیادی برای پیاده سازی memento وجود دارند. برای پیاده سازی memento ابتدا یک abstract class را به شکل زیر ایجاد میکنیم:
abstract class MementoBase { protected Guid mementoKey = Guid.NewGuid(); abstract public void SaveMemento(Memento memento); abstract public void RestoreMemento(Memento memento); }
اگر به کلاس بالا دقت کنید، این کلاس قرار است parent کلاسهای دیگری باشد که داری دو متد SaveMemento و RestoreMemento برای ذخیره و بازیابی و همچنین یک Guid برای نگهداری stateهای مختلف میباشد.
ورودی متدها از نوع memento میباشد. پس کلاس memento را به شکل زیر ایجاد میکنیم:
class Memento { private Dictionary<Guid, object> stateList = new Dictionary<Guid, object>(); public object GetState(Guid key) { return stateList[key]; } public void SetState(Guid key, object newState) { stateList[key] = newState; } public Memento() { } }
در کد بالا با یک Dictionary میتوان هر object را با کلیدش ذخیره کنیم. توجه کنید که value دیکشنری از نوع object میباشد و چون object پدر تمام objectهای دیگر است پس میتوانیم هر نوع دادهای را در آن ذخیره کنیم. تا اینجا، Memento پیاده سازی شده است. میتوان این کار را با جنریکها نیز پیاده سازی کرد.
در ادامه میخواهیم یک کلاس بسازیم و حالتهای مختلف را در آن بررسی کنیم. کلاس زیر را ایجاد کنید:
class ConcreteOriginator : MementoBase { private int value = 0; public ConcreteOriginator(int newValue) { SetData(newValue); } public void SetData(int newValue) { value = newValue; } public void Speak() { Console.WriteLine("My value is " + value.ToString()); } public override void SaveMemento(Memento memento) { memento.SetState(mementoKey, value); } public override void RestoreMemento(Memento memento) { int restoredValue = (int)memento.GetState(mementoKey); SetData(restoredValue); } }
کلاس ConcreteOriginator از کلاس MementoBase ارث بری کرده و دو متد RestoreMemento و SaveMemento را پیاده سازی میکند و همچنین دارای یک مشخصه value میباشد. برای خروجی گرفتن، متد main را به صورت زیر پیاده سازی میکنیم:
static void Main(string[] args) { Memento memento = new Memento(); // Create an originator, which will hold our state data. ConcreteOriginator myOriginator = new ConcreteOriginator("Hello World!", StateType.ONE); ConcreteOriginator anotherOriginator = new ConcreteOriginator("Hola!", StateType.ONE); ConcreteOriginator2 thirdOriginator = new ConcreteOriginator2(7); // Set some state data. myOriginator.Speak(); anotherOriginator.Speak(); thirdOriginator.Speak(); // Save the states into our memento. myOriginator.SaveMemento(memento); anotherOriginator.SaveMemento(memento); thirdOriginator.SaveMemento(memento); // Now change our originators' states. myOriginator.SetData("Goodbye!", StateType.TWO); anotherOriginator.SetData("Adios!", StateType.TWO); thirdOriginator.SetData(99); myOriginator.Speak(); anotherOriginator.Speak(); thirdOriginator.Speak(); // Restore our originator's state. myOriginator.RestoreMemento(memento); anotherOriginator.RestoreMemento(memento); thirdOriginator.RestoreMemento(memento); myOriginator.Speak(); anotherOriginator.Speak(); thirdOriginator.Speak(); Console.ReadKey(); }
Hello World! I'm in state ONE Hola! I'm in state ONE My value is 7 Goodbye! I'm in state TWO Adios! I'm in state TWO My value is 99 Hello World! I'm in state ONE Hola! I'm in state ONE My value is 7
آنچه که در خصوص کتابخانه های مخصوص اعتبارسنجی فرمودید آیا با ارجاع به بانک اطلاعاتی هم پیاده سازی میشوند؟ چون مفهوم اعتبارسنجی را در سطح کلاس های برنامه بلد هستم. برای سناریوی عنوان شده در پست اولیه، یک لایه اعتبارسنجی توسط FluentValidation پیاده سازی شده و null بودن کلیدها بررسی می شوند ولی وجود چنین شناسه ای به عنوان کلید اصلی در بانک اطلاعاتی چطور باید بررسی شود؟ آیا با همان FluentValidation امکانپذیر است یا اینکه در همان لایه Application باید تمام کلیدها بررسی و پیغام مناسب به کاربر برگردانده شود؟
- ASP.NET Identity برای حالت single sign-on طراحی نشدهاست (^). هرچند با تغییراتی در کوکیها و Claims میسر است (^). برای حالت single sign-on بهتر است از پروژهی دیگری به نام identity server استفاده کنید (^). همچنین JWT برای این مورد خاص، گزینهی بهتری است (^ و ^).
(Data Mining Algorithms (Analysis Services - Data Mining
(Algorithm Parameters (SQL Server Data Mining Add-ins
1 - Microsoft Association Rules
به منظور ایجاد قوانینی که توصیف کننده این موضوع باشد که چه مواردی احتمالاً با یکدیگر در تراکنشها ظاهر میشوند، استفاده میشود.
Range | Default | Parameter |
(...,1] | 200000 | MAXIMUM_ITEMSET_COUNT |
[0,500] | 3 | MAXIMUM_ITEMSET_SIZE |
(...,0.0) | 1.0 | MAXIMUM SUPPORT |
(...,...) | 999999999- | MINIMUM IMPORTANCE |
[1,500] | 1 | MINIMUM_ITEMSET_SIZE |
[0.0,1.0] | 0.4 | MINIMUM PROBABILITY |
(...,0.0] | 0.0 | MINIMUM SUPPORT |
2 - Microsoft Clustering
به منظور شناسائی روابطی که در یک مجموعه داده ممکن است از طریق مشاهده منطقی به نظر نرسد، استفاده میشود. در واقع این الگوریتم با استفاده از تکنیکهای تکرار شونده رکوردها را در خوشه هایی که حاوی ویژگیهای مشابه هستند گروه بندی میکند.
Range | Default | Parameter |
(...,0] | 10 | CLUSTER COUNT |
(...,0] | 0 | CLUSTER SEED |
1,2,3,4 | 1 | CLUSTERING METHOD |
[0,65535] | 255 | MAXIMUM_INPUT_ATTRIBUTES |
[2,65535],0 | 100 | MAXIMUM STATES |
(...,0) | 1 | MINIMUM SUPPORT |
[1,50] | 10 | MODELLING_CARDINALITY |
(...,100],0 | 50000 | SAMPLE SIZE |
(...,0) | 10 | STOPPING TOLERANCE |
3 - Microsoft Decision Trees
مبتنی بر روابط بین ستونهای یک مجموعه داده ای باعث پیش بینی روابط مدلها میشود، که به صورت یک سری درختوار ویژگیها در آن شکسته میشوند.
به منظور انجام پیش بینی از هر دو ویژگی پیوسته و گسسته پشتیبانی میشود.
Range | Default | Parameter |
(0.0,1.0) | COMPLEXITY_PENALTY | |
FORCE REGRESSOR | ||
[0,65535] | 255 | MAXIMUM_INPUT_ATTRIBUTES |
[0,65535] | 255 | MAXIMUM_OUTPUT_ATTRIBUTES |
(...,0.0) | 10.0 | MINIMUM SUPPORT |
1,3,4 | 4 | SCORE METHOD |
[1,3] | 3 | SPLIT METHOD |
4 - Microsoft Linear Regression
چنانچه یک وابستگی خطی میان متغیر هدف و متغیرهای مورد بررسی وجود داشته باشد، کارآمدترین رابطه میان متغیر هدف و ورودیها را پیدا میکند.
به منظور انجام پیش بینی از ویژگی پیوسته پشتیبانی میکند.
Range | Default | Parameter |
| FORCE REGRESSOR | |
[0,65535] | 255 | MAXIMUM_INPUT_ATTRIBUTES |
[0,65535] | 255 | MAXIMUM_OUTPUT_ATTRIBUTES |
5 - Microsoft Logistic Regression
به منظور تجزیه و تحلیل عواملی که در یک تصمیم گیری مشارکت دارند که پی آمد آن به وقوع یا عدم وقوع یک رویداد میانجامد از این الگوریتم استفاده میشود.
جهت انجام پیش بینی از هر دو ویژگی پیوسته و گسسته پشتیبانی میکند.
Range | Default | Parameter |
(0,100) | 30 | HOLDOUT_PERCENTAGE |
(...,...) | 0 | HOLDOUT SEED |
[0,65535] | 255 | MAXIMUM_INPUT_ATTRIBUTES |
[0,65535] | 255 | MAXIMUM_OUTPUT_ATTRIBUTES |
[2,65535],0 | 100 | MAXIMUM STATES |
(...,0] | 10000 | SAMPLE SIZE |
6 - Microsoft Naïve Bayes
احتمال ارتباط میان تمامی ستونهای ورودی و ستونهای قابل پیش بینی را پیدا میکند. همچنین این الگوریتم برای تولید سریع مدل کاوش به منظور کشف ارتباطات بسیار سودمند میباشد. تنها از ویژگیهای گسسته یا گسسته شده پشتیبانی میکند و با تمامی ویژگیهای ورودی به شکل مستقل رفتار میکند.
Range | Default | Parameter |
[0,65535] | 255 | MAXIMUM_INPUT_ATTRIBUTES |
[0,65535] | 255 | MAXIMUM_OUTPUT_ATTRIBUTES |
[2,65535],0 | 100 | MAXIMUM STATES |
(0,1) | 0.5 | MINIMUM_DEPENDENCY_PROBABILITY |
7 - Microsoft Neural Network
به منظور تجزیه و تحلیل دادههای ورودی پیچیده یا مسائل بیزنسی که برای آنها مقدار قابل توجهی داده آموزشی در دسترس میباشد اما به آسانی نمیتوان با استفاده از الگوریتمهای دیگر این قوانین را بدست آورد، استفاده میشود. با استفاده از این الگوریتم میتوان چندین ویژگی را پیش بینی نمود. همچنین این الگوریتم میتواند به منظور طبقه بندی برای ویژگیهای گسسته و ویژگیهای پیوسته رگرسیون مورد استفاده قرار گیرد.
Range | Default | Parameter |
(...,0] | 4.0 | HIDDEN_NODE_RATIO |
(0,100) | 30 | HOLDOUT PERCENTAGE |
(...,...) | 0 | HOLDOUT SEED |
[0,65535] | 255 | MAXIMUM_INPUT_ATTRIBUTES |
[0,65535] | 255 | MAXIMUM_OUTPUT_ATTRIBUTES |
[2,65535],0 | 100 | MAXIMUM STATES |
(...,0] | 10000 | SAMPLE SIZE |
8 - Microsoft Sequence Clustering
به منظور شناسائی ترتیب رخدادهای مشابه در یک دنباله استفاده میشود. در واقع این الگوریتم ترکیبی از تجزیه تحلیل توالی و خوشه را فراهم میکند.
Range | Default | Parameter |
(...,0] | 10 | CLUSTER COUNT |
[2,65535],0 | 64 | MAXIMUM_SEQUENCE_STATES |
[2,65535],0 | 100 | MAXIMUM STATES |
(...,0] | 10 | MINIMUM SUPPORT |
9 - Microsoft Time Series
به منظور تجزیه و تحلیل دادههای زمانی (دادههای مرتبط با زمان) در یک درخت تصمیم گیری خطی استفاده میشود. الگوهای کشف شده میتوانند به منظور پیش بینی مقادیر آینده در سریهای زمانی استفاده شوند.
Range | Default | Parameter |
[0.0,1.0] | 0.6 | AUTO_DETECT_PERIODICITY |
(1.0,...) | 0.1 | COMPLEXITY_PENALTY |
ARIMA,ARTXP,MIXED | MIXED | FORECAST METHOD |
[0,100] | 1 | HISTORIC_MODEL_COUNT |
(...,1] | 10 | HISTORIC_MODEL_GAP |
[0.0,1.0] | 1.0 | INSTABILITY_SENSITIVITY |
[...,column maximum] | 1E308+ | MAXIMUM_SERIES_VALUE |
[column minimum,...] | 1E308- | MINIMUM_SERIES_VALUE |
(...,1] | 10 | MINIMUM SUPPORT |
None,Previous,Mean | None | MISSING_VALUE_SUBSTITUTION |
{...list of integers...} | {1} | PERIODICITY_HINT |
[0.0,1.0] | 0.5 | PREDICTION SMOOTHING |
ارزیابی و تفسیر مدل در داده کاوی
لینک زیر دانلود مجموعه آموزش SQL Server 2012 Tutorials - Analysis Services Data Mining میباشد. که شامل موارد زیر است:
Lesson 1: Preparing the Analysis Services Database
Lesson 2: Building a Targeted Mailing Structure
Lesson 3: Adding and Processing Models
Lesson 4: Exploring the Targeted Mailing Models
Lesson 5: Testing Models
Lesson 6: Creating and Working with Predictions
Intermediate Data Mining Tutorial
Lesson 1: Creating the Intermediate Data Mining Solution
Lesson 2: Building a Forecasting Scenario
Lesson 3: Building a Market Basket Scenario
Lesson 4: Building a Sequence Clustering Scenario
Lesson 5: Building Neural Network and Logistic Regression Models
Creating and Querying Data Mining Models with DMX: Tutorials
Lesson 1: Bike Buyer
Lesson 2: Market Basket
Lesson 3: Time Series Prediction
از آنجا که با سونامی «تحصیلات تکمیلی» در کشور مواجه هستیم و بسیاری از پایان نامهها پیرامون موضوع Data Mining میباشد و همچنین مشابه بسیاری از موضوعات دیگر؛ بدون در نظر گرفتن زیر ساختها و فلسفه پیدایش موضوع و دستاوردهای آن و ... پروژههای داده کاوی نیز به صورت وارداتی به کشور و به طبع سازمانها تحمیل میشود و ... امیدوارم توانسته باشم، هم زبانان نا آشنا را تا حدی که در توان داشتم با موضوع آشنا کرده باشم. برای مطالعه منابع غیر از SQL Server کتابهای « داده کاوی کاربردی - RapidMiner » انتشارات نیاز دانش و همچنین کتاب « داده کاوی با کلمنتاین » انتشارات جهاد دانشگاهی واحد صنعتی امیر کبیر نیز به بیان موضوع میپردازد. موفق و سلامت باشید.