یکشنبه , ۳۱ شهریور ۱۳۹۸
خانه - محمد لطفی

محمد لطفی

برنامه نویس و توسعه دهنده .Net هستم. از یادگیری و آموزش لذت می برم. برنامه نویسی رو از دانشگاه شروع کردم و الانم در نیک آموز مهارت های خودم رو توسعه می دم.

معماری سنتی یا اپلیکیشن های تک صفحه ای(SPA)

انتخاب یک معماری صحیح برای پیاده سازی یک اپلیکیشن میتواند تاثیر بسیار زیادی روی فرایند توسعه و نگه داری نرم افزار شما باید. در این مقاله بررسی می کنیم که چه زمانی باید از اپلیکیشن های تک صفحه ای استفاده کنیم. و چ زمانی از معماری سنتی چند صفحه ای. به این منظور این مقاله به دو بخش تقسیم می شود. 

  • چه زمانی باید از اپلیکیشن های تک صفحه ای (SPA) استفاده کنیم.
  • چه زمانی باید از اپلیکشن های چند صفحه ای استفاده کنیم.

چه زمانی باید یک معماری سنتی را انتخاب کنید؟

دلایلی که در ادامه مقاله ذکر شده اند به شما در جواب دادن به سوال بالا کمک می کنند. و مشخص می کنند ک شما چرا و چه وقت باید به سراغ معماری سنتی بروید.

وقتی اپلیکیشن شما ساده و قسمت کلاینت ساید آن خیلی نیاز به تغییرات ندارد

Many web applications are primarily consumed in a read-only fashion by the vast majority of their users. Read-only (or read-mostly) applications tend to be much simpler than those that maintain and manipulate a great deal of state. For example, a search engine might consist of a single entry point with a textbox and a second page for displaying search results. Anonymous users can easily make requests, and there is little need for client-side logic. Likewise, a blog or content management system’s public-facing application usually consists mainly of content with little client-side behavior. Such applications are easily built as traditional server-based web applications which perform logic on the web server and render HTML to be displayed in the browser. The fact that each unique page of the site has its own URL that can be bookmarked and indexed by search engines (by default, without having to add this as a separate feature of the application) is also a clear benefit in such scenarios.

Your application needs to function in browsers without JavaScript support

Web applications that need to function in browsers with limited or no JavaScript support should be written using traditional web app workflows (or at least be able to fall back to such behavior). SPAs require client-side JavaScript in order to function; if it’s not available, SPAs are not a good choice.

Your team is unfamiliar with JavaScript or TypeScript development techniques

If your team is unfamiliar with JavaScript or TypeScript but is familiar with server-side web application development, then they will probably be able to deliver a traditional web app more quickly than a SPA. Unless learning to program SPAs is a goal, or the user experience afforded by a SPA is required, traditional web apps are a more productive choice for teams who are already familiar with building them.

When to choose SPAs

The following is a more detailed explanation of when to choose a Single Page Applications style of development for your web app.

Your application must expose a rich user interface with many features

SPAs can support rich client-side functionality that doesn’t require reloading the page as users take actions or navigate between areas of the app. SPAs can load more quickly, fetching data in the background, and individual user actions are more responsive since full page reloads are rare. SPAs can support incremental updates, saving partially completed forms or documents without the user having to click a button to submit a form. SPAs can support rich client-side behaviors, such as drag-and-drop, much more readily than traditional applications. SPAs can be designed to run in a disconnected mode, making updates to a client-side model that are eventually synchronized back to the server once a connection is re-established. You should choose a SPA style application if your app’s requirements include rich functionality that goes beyond what typical HTML forms offer. Note that frequently SPAs need to implement features that are built-in to traditional web apps, such as displaying a meaningful URL in the address bar reflecting the current operation (and allowing users to bookmark or deep link to this URL to return to it). SPAs also should allow users to use the browser’s back and forward buttons with results that won’t surprise them.

Your team is familiar with JavaScript and/or TypeScript development

Writing SPAs requires familiarity with JavaScript and/or TypeScript and client-side programming techniques and libraries. Your team should be competent in writing modern JavaScript using a SPA framework like Angular.

Your application must already expose an API for other (internal or public) clients

If you’re already supporting a web API for use by other clients, it may require less effort to create a SPA implementation that leverages these APIs rather than reproducing the logic in server-side form. SPAs make extensive use of web APIs to query and update data as users interact with the application.

Decision table – Traditional Web or SPA

The following decision table summarizes some of the basic factors to consider when choosing between a traditional web application and a SPA.

مسیریابی در ASP.NET Core

مسیریابی در ASP.NET Core به مکانیسمی گفته می شود که آدرس کامل را از درخواست Http  گرفته و با بررسی آن درخواست را به controller و action  مورد نظر هدایت می کند.

ASP.NET Core Routing

وقتی که کاربر یک url را از سرور درخواست می کند.آدرس درخواست وی به وسیله سیستم مسیر یابی دریافت می شود. سیستم مسیریابی تلاس میکند تا الگوی آدرس را با مسیر هایی که برایش تعریف کرده اند مقایسه کرده و مسیر را پیدا کند. بعد از پیدا کردن الگو و بیرون کشیدن نام controller و action ها درخواست به سمت اکشن مربوطه می رود. اگر برای آدرس درخواست الگوی مناسبی پیدا نشود. سیستم خطای 404 را بر میگرداند.

ASP.NET Core Routing Flow

انواع مسیر یابی

در Asp.net Core دو نوع مسیر یابی داریم.

Types of Routing

مسیریابی بر اساس قرارداد

در این حالت قرارداد های مسیریابی که هر کدام تعیین میکنن که چ الگویی به عنوان الگوی آدرس صحیح شناخته شود. تعریف می شوند. این تعریف در فایل Startip.cs انجام می شود.

در تصاویر پایین نمونه Conventions based Routing Configuration & Mapping را میبینید.

 

Conventions based Routing Configuration
Conventions based Routing Mapping

مسیریابی به کمک صفت ها

در این روش مسیریابی و تعریف مسیر ها به کمک attribute هایی که در controller و action ها نوشته می شود مشخص میشوند. بعد از مشخص کردن آنها با وارد کردن آدرس مطابق الگویی که در attribute  نوشته شده است . action  مورد نظر صدا زده می شود.

ASP.NET Core Attribute Routing

قابلیت Attribute Routing Tokens

یکی از ویژگی های خوب سیستم routing فریم ورک Asp .Net Core قابلیت انعطاف آن همانند سیستم Asp.Net MVC5 است.در این سیستم در الگوی آدرس ها می تواند از Token  های معنادار استفاده کرد تا مقدار آنها با مقادیر موجود در Route Table به صورت خودکار جایگزین شود.

ASP.NET Core Attribute Routing Token

مسیریابی ترکیبی

شما می توانید به صورت ترکییب هم از روش اول و هم از روش دوم مسیر یابی استفاده کنید. در حقیقت شما باید از هر دوی آنها استفاده کنید چون لازم نیست برای تک تک action های خود این کار را انجام بدهید. یک بار قرار داد مسیر را تعریف میکنید و او به ازای تمامی action  ها آن را بررسی میکند.

محدودیت های مسیرها

محدودیت های مسیریابی برای کنترل و محدود کردن داده ها و پارامترهایی هستند که به action پاس داده می شوند. به عنوان مثال وقتی شما به یک Id از نوع Int نیاز دارید. می توانید آن محدودیت را با نوشتن نام پارامتر و نوع آن در بین علامت {} ایجاد کنید.

در زیر لیست محدودیت های اصلی asp که میتوانید از آنها استفاده کنید را مشاهده می کنید.

  1. :int
  2. :bool
  3. :datetime
  4. :decimal
  5. :guid
  6. :length(min,max)
  7. :alpha
  8. :range(min,max)

پارامترهای اختیاری ( Optional Parameters )

شما می توانید پارامتره ای خود را به صورت اختیاری تعریف کنید. تا اجباری به وارد کردن آن در آدرس نباشد. برای این کار نیاز دارید تا در تعریف پارامتر از علامت ؟ استفاده کنید.

You can define your route parameter as optional in routes by adding a question mark (?) to the parameter’s constraint as given below:

app.UseMvc(routes =>{

routes.MapRoute( template: “{controller}/{action}/{id:int?}”);

});

مقادیر پیفرض

هنگام تعریف مسیرها و اضافه کردن آنها به سیستم routing می توان برای المان هایی نظیر controller و action مقدار پیشفرض تعیین کرد تا هنگامی که مقدار آنها وارد نشد به صورت خودکار مقدار بگیرند.

app.UseMvc(routes => { routes.MapRoute( template: “{controller=Home}/{action=Index}/{id:int?}”); });

مقایسه Asp.Net MVC و Asp.Net Core

 

 

درسال 2016 مایکروسافت از فریم ورک جدید خود یعنی .Net Core رونمایی کرد. این فریم ورک نسخه جدیدی از فریم ورک قبلی مایکروسافت نبود . بلکه یک فریم ورک کاملا جدید و از صفر نوشته شده بود. در دنیای امروز هر توسعه دهنده ای دوست دارد تا برنامه یا نرم افزار خود را بر پایه بستری پیاده سازی کند که فاکتورهایی نظیر امنیت،انعطلاف پذیری و … را داشته باشد. بنابر این اگر ما علاقه مند به استفاده از .Net Core  هستیم بهتر است قبل از آن کمی درمورد تفاوت های آن با نسخه پیش ، امکاناتی که برای ما فراهم می کند و امکاناتی که از ما می گیرید را بشناسیم. در این مقاله ما در مورد تفاوت ها بحث خواهیم کرد.

چند سکویی بودن

Aps .Net core یک فریم ورک چند سکویی ( cross-platform ) . با استفاده از این فریمورک ما می توانیم آپلیکیشن خود را بر روی هر سیستم عاملی نصب و توسعه دهیم. این سیستم عامل میتواند ویندوز، مک، لینوکس و غیره باشد.

ساختار پروژه کاملا متفاوت

در یک آپلیکیشن Asp.Net Core ساختار پروژه و فولدر بندی ها تغییر کرده اند. از تغییرات اساسی که میتوان به آن اشاره کرد حذف شدن فایل web.config است. این سوال برای ما به وجود می آید که تنظیماتی که در این فایل قابل انجام بود اکنون کجا نوشته می شود.در Asp.Net Core فایلی تحت عنوان appsettings.json به پروژه اضافه شده است که قسمتی از تنظیمات برنامه در آن قرار میگیرد. و همانگونه ک میبینید این فایل به فرمت JSON ارائه شده است. یک پوشه جدید به نام wwroot به پروژه اضافه شده است که نگهدارنده تمامی محتوایی است که به سمت مرورگر ارسال می شود مثل فایل های استاتیک ،تصاویر،فایل های HTMLو فایل های CSS و js. تصویر زیر تفاوت ساختاری پروژه های ASp .net MVC و Apn.net core را نشان می دهد.

عدم وابستگی به IIS

کمی پیش تر گفتیم که این فریم ورک Cross-Platform است و ما می توانیم آن را بغیر از IIS روی سایر وب سرور ها مثل  Nginx, Apache, Docker نصب کنیم. در این حالت وب سرور اصلی (Kestrel) نقش یک وب سرور داخلی را بازی می کند.

نصب و راه اندازی

In case of installation of an associated application that is developed within the .Net framework, it’s perpetually one package installation and conjointly needed some runtime surroundings for the Windows in operating systems. But since .Net Core could be cross-platform, therefore application developed during this framework got to be prepackaged and put in severally for the package. Developers have to compile the Nuget packages including within the .Net Core.

SUPPORT FULL .NET AND .NET CORE

Since .NET Core doesn’t support all the options and functionalities provided by the most recent version of .NET Framework. However, it’s going to be used as a collection of the .NET Framework. Also, .NET Core continues to be compatible with .NET Framework through the .NET traditional Library. Hence, the developers can still run the applications developed with .NET Framework once upgrading to .NET Core.

MODULAR COLLECTION OF LIBRARY

Both .NET Framework and .NET Core permits developers to require advantage of sturdy category libraries. But .NET Core uses a redesigned common language runtime named as CoreCLR, and choices a customary assortment of libraries named as CoreFX. Hence, the developers have the option to decide and use entirely the libraries required by each application and enhance the application’s performance by removing superfluous libraries.

MOBILE APP DEVELOPMENT

.NET Framework does not embrace any durable framework or tools to the mobile app development. But .NET Core compatible with Xamarin with the help of the .NET commonplace Library. Hence, developers can make the most of Xamarin to place in writing cross-platform mobile apps in C# with a shared code base with help of same APIs. They’re going to a lot of using the tools provided by Xamarin to customize the mobile app for individual mobile platforms like Android, iOS and Windows Phone.

MICROSERVICES

In case of .Net Core, this framework makes the developer life very easy to develop microservice oriented systems which is too much completed in case of standard .Net Framework. Intrinsically systems embrace a variety of freelance and dynamic microservices, the developers have to be compelled to concentrate on individual microservices. .NET Core permits programmers to develop custom microservices by mistreatment variable programming languages, technologies and frameworks. Also, the developers can build a powerful system by combining multiple microservices seamlessly.

PERFORMANCE AND QUANTIFIABILITY

.NET Core is additional sensible than .NET Framework to bolster the performance and quantifiability of applications. It permits developers to bolster the performance of applications drastically whereas not deploying any hardware or infrastructure. Also, it permits developers to create, check and deploy applications directly at the environment of the cloud. Hence, the developers can switch to .NET Core to bolster the performance and quantifiability of their applications whereas not putt overtime and energy.

Source : https://goo.gl/pgjPfm

We can add reference of any assembly, library or any third party package with the help of Nuget Packages. When we run the download of these packages using NuGet Manager Console, all the packages have been downloaded in the Packages folder within the Project folder hierarchy. ASP.NET Core came up with storing all the packages related to its development in Users folder and whereas creating ASP.NET Core applications, Visual Studio will reference them from Users folder. This feature is called Runtime Store for .NET Core a try of presently though you have got around 100 sample ASP.NET Core applications, all of them area unit referencing from dotnet in Users folder that’s almost few MBs entirely.

SERVER-SIDE AND CLIENT-SIDE DEPENDENCE

In case of .Net Frameworks, we mean developers are very much familiar with how to reference a dll or a Nuget Packages in a project or solution using Visual Studio IDE. So, with the help of Visual Studio IDE, we can deploy our applications in operating systems including Windows, Linux or Unit.

Its Server facet management of dependencies. Client-side dependency management is a lot of necessary as a result of client-side has a lot of totally different packages from the server facet. Client aspect will surely have jQuery, Bootstrap, grunt, any JavaScript frameworks like AngularJS, Backbone etc, images, vogue files. Here, “Bower” and “NPM” are the name of two most important open source community for maintaining Client-Side package management as part of the Dependencies.

IN BUILD DEPENDENCY INJECTION (DI)

Dependency Injection (DI) achieves loosely coupled, additional testable code in the applications. In ASP.NET MVC 5/4 or classic ASPX based mostly applications, we tend to use to own separate DI containers used like Unity, AutoFac, StructureMap etc. We had to form up our project to use DI, its additional effort.

In ASP.NET Core applications, dependency injection is inherent i.e. no setup headache for DI. simply produce some services and obtainable to use DI. In the case of sample .Net Core MVC Applications, sample projects always used inherited DI in the code (especially in Startup.cs file). With the help of this files, we can implement any type of configuration like EF, Authentication etc and also implement custom service as we required.

چرخه عمر درخواست ها در ASP MVC

در این مقاله به بررسی طول عمر و اتفاقاتی که برای یک درخواست Http از لحظه فرستادن آن برای سرور تا ساخت پاسخ و نمایش آن در مرورگر بحث خواهیم کرد.

 

وقتی شما یک Action را در mvc صدا می زنید تمام چیزی که اتفاق می افتد دقیقا مانند این است که یک متد را با پارامتر هایش صدا بزنید. اینکه چگونه ما از یک درخواست http  به فراخوانی یک متد با پارامتر هایش می رسیم. موضوعی است که اینجا در مورد آن صحبت خواهیم کرد. در اینجا سعی خواهیم کرد تا به طور کامل شرح دهیم که چ اتفاقی برای یک درخواست Http  می افتد. یک سفر به درون فریم ورک می تواند خیلی خیلی برای حل بعضی از مسایل مفید باشد.

BeginRequest Event

The BeginRequest event signals the creation of any given new request. This event is always raised and is always the first event to occur during the processing of a request.

AuthenticateRequestEvent

The AuthenticateRequest event signals that the configured authentication mechanism has authenticated the current request. Subscribing to the AuthenticateRequest event ensures that the request will be authenticated before processing the attached module or event handler.

PostAuthenticateRequest Event

The PostAuthenticateRequest event is raised after the AuthenticateRequest event has occurred. Functionality that subscribes to the PostAuthenticateRequest event can access any data that is processed by the PostAuthenticateRequest.

AuthorizeRequestEvent

The AuthorizeRequest event signals that ASP.NET has authorized the current request. Subscribing to the AuthorizeRequest event ensures that the request will be authenticated and authorized before processing the attached module or event handler.

AuthorizeRequestEvent

The PostAuthorizeRequest event signals that ASP.NET has authorized the current request. Subscribing to the PostAuthorizeRequest event ensures authentication and authorization of the request before processing the attached module or event handler.

PostAuthorizeRequestEvent

The PostAuthorizeRequest event signals that ASP.NET has authorized the current request. Subscribing to the PostAuthorizeRequest event ensures authentication and authorization of the request before processing the attached module or event handler.

ResolveRequestCacheEvent

Occurs when ASP.NET finishes an authorization event to let the caching modules serve requests from the cache, bypassing execution of the event handler (for example, a page or an XML Web service).

PostResolveRequestCache Event

Occurs when ASP.NET bypasses execution of the current event handler and allows a caching module to serve a request from the cache.

After the PostResolveRequestCache event and before the PostMapRequestHandler event, an event handler (which is a page that corresponds to the request URL) is created. When a server is running IIS 7.0 in Integrated mode and at least the .NET Framework version 3.0, the MapRequestHandler event is raised. When a server is running IIS 7.0 in Classic mode or an earlier version of IIS, this event cannot be handled.

MapRequestHandlerEvent

The MapRequestHandler event is used by the ASP.NET infrastructure to determine the request handler for the current request. For more information, see How to: Register HTTP Handlers.

PostMapRequestHandler Event

Occurs when ASP.NET has mapped the current request to the appropriate event handler.

AcquireRequestStateEvent


Occurs when ASP.NET acquires the current state (for example, session state) that is associated with the current request.

PostAcquireRequestState Event


The PostAcquireRequestState event is raised after the AcquireRequestState event has occurred. Functionality that subscribes to the AcquireRequestState event can access any data that is processed by the PostAcquireRequestState.

PreRequestHandlerExecute Event

Occurs just before ASP.NET starts executing an event handler (for example, a page or an XML Web service).

The event handler is executed.

PostRequestHandlerExecute Event

Occurs when the ASP.NET event handler (for example, a page or an XML Web service) finishes execution.

ReleaseRequestStateEvent

Occurs after ASP.NET finishes executing all request event handlers. This event causes state modules to save the current state data.

PostReleaseRequestState Event

Occurs when ASP.NET has completed executing all request event handlers and the request state data has been stored.

After the PostReleaseRequestState event is raised, any existing response filters will filter the output.

UpdateRequestCacheEvent

Occurs when ASP.NET finishes executing an event handler in order to let caching modules store responses that will be used to serve subsequent requests from the cache.

PostUpdateRequestCache Event

Occurs when ASP.NET finishes updating caching modules and storing responses that are used to serve subsequent requests from the cache.

The PostUpdateRequestCache event is raised after the UpdateRequestCache event has occurred. When the PostUpdateRequestCache is raised, ASP.NET has completed processing code and the content of the cache is finalized.

LogRequest Event

Occurs just before ASP.NET performs any logging for the current request.
The LogRequest event is raised even if an error occurs. You can provide an event handler for the LogRequest event to provide custom logging for the request.

The following example demonstrates how to provide an event handler for the LogRequest event. The event handler also handles several other events. Therefore, the CurrentNotification and IsPostNotification properties are used to determine what code to run.

using System;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
// Module that demonstrates one event handler for several events.
namespace Samples
{
public class ModuleExampleTestCS : IHttpModule
{
public ModuleExampleTestCS()
{
// Constructor
}
public void Init(HttpApplication app)
{
app.AuthenticateRequest += new EventHandler(App_Handler);
app.PostAuthenticateRequest += new EventHandler(App_Handler);
app.LogRequest += new EventHandler(App_Handler);
app.PostLogRequest += new EventHandler(App_Handler);
}
public void Dispose()
{
}
// One handler for AuthenticationRequest, PostAuthenticateRequest,
// LogRequest, and PostLogRequest events
public void App_Handler(object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
HttpContext context = app.Context;
if (context.CurrentNotification == RequestNotification.AuthenticateRequest)
{
if(!context.IsPostNotification)
{
// Put code here that is invoked when the AuthenticateRequest event is raised. } else { // PostAuthenticateRequest // Put code here that runs after the AuthenticateRequest event completes. } } if (context.CurrentNotification == RequestNotification.LogRequest) { if (!context.IsPostNotification) { // Put code here that is invoked when the LogRequest event is raised. } else { // PostLogRequest // Put code here that runs after the LogRequest event completes. } } }}
}

PostLogRequest Event

Occurs when ASP.NET has completed processing all the event handlers for the LogRequest event.

EndRequest Event


Occurs as the last event in the HTTP pipeline chain of execution when ASP.NET responds to a request.

منبع

هفت گام تا تبدیل شدن به یک طراح UI/UX

من اخیرا سوال های مشابهی رو از افراد زیادی دریافت کرده ام:

  • چگونه می توانم بیشتر در مورد UI/UX یادبگیرم؟
  • من یه برنامه نویسم/مدیر بازاریابی/استراتژیست محتوا هستم و میخوام بیشتر در مورد طراحی بدانم. از کجا باید شروع کنم؟
  • فرق بین یک طراحی خوب و یک طراحی بد چیه؟
  • چقدر طول میکشد تا تبدیل به یک طراح شویم؟

من چگونه شروع کردم؟

این سوال من را به 7 سال هفت سال پیش برد، زمانی که اولین شغلم را شروع کردم، اولین روز کاری من به عنوان یک طراح بود. من پشت یک فایل خالی و سفید رنگ فتوشاپ نشسته بودم. من داشتم سعی میکردم که بفهمم مدیرم دقیقا از من چه چیز می خواهد. من هیچ ایده ای برای انجام اون نداشتم.

قبل از گرفتن اون شغل من مدرک طراحی از دانشگاه داشتم. خب برام این سوال پیش اومد که چرا من چیزی در مورد طراحی نمی دانم؟

خب، در دانشگاه به ما طراحی به صورت عملی درس داده نشده بود. اکثر کلاس ها و دوره هایی که گذرانده بودیم، بر پایه مباحث تئوری بود و اینکه چطور میتوان از ابزار هایی مثل فتوشاپ و … استفاده کرد.

اما این کافی نبود.حتی یک ذره هم کمکی نمی کرد.

یاد گرفتن و تمرین کردن توسط خودتان تنها راهی هست که شما را به یک طراح بهتر تبدیل می کند.

بعد از 7 سال تمرین و خودآموزی، من الان یک  معلم طراحی و یک سخنران بین المللی هستم.

اولین چیزی که باید بدانید این است که:

لازم نیست که به صورت مادر زادی طراح باشید.

طراحان موجودات شگفت انگیزی نیستند که از همان ابتدا به عنوان یک هنرمند به دنیا امده باشند. طراحی باید یاد گرفته شود.

طراحی هنر حل کردن مسائل است. یک فرایند پیوسته از پیدا کردن و حل کردن مسائل مختلف است.

1-خودتان را با اصول رابط کاربری آشنا کنید.

قبل از شروع تمرین و یادگیری طراحی شما لازم دارید که با برخی از اصول آن آشنا شوید. بعد از این مرحله شما می توانید وارد دنیای طراحی شوید و شروع کنید به خلاقانه اندیشیدن. شما جنبه های روانشناختی طراحی را یاد خواهید گرفت و می توانید ببینید که چرا یک اثر خوب و یک اثر دیگر یک شکست محسوب می شود.

در اینجا چند مورد از اصولیپ طراحی که باید با آنها آشنا باشید را ذکر میکنیم:

1-رنگ

معنی رنگ ها ، اصول و روانشناسی رنگ ها – بیشتر

1. Color

Color vocabulary, fundamentals and the psychology of colors.
Principles of design: Color

2. Balance

Symmetry and assymetry.
Principles of design: Balance

3. Contrast

Using contrast to organize information, build hierarchy and create focus.
Principles of design: contrast

4. Typography

Choosing fonts and creating readable text on the web.
10 Principles Of Readability And Web Typography

5. Consistency

The most important principle, creating intuitive and usable designs starts here.
Design principle: Consistency

Here are some great do’s and don’ts to design a good UI.

2. Learn the creative UX process.

The next thing is to understand the creative process. UI/UX design is a process of specific phases that every creative person goes through.

The creative process

Divided into four distinct phases — Discover, Define, Develop and Deliver — the Double Diamond is a simple visual map of the design process.

Discover

This is the start of the project. Designers start researching, getting inspired, and gathering ideas.

Define

This is the definition stage, where designers define an idea extracted from the Discover phase. From this, a clear creative brief is created.

Develop

This is where solutions or concepts are created, prototyped, tested and iterated. This process of trial and error helps designers to improve and refine their ideas.

Delivery

The final phase is the delivery stage, where the final project is finalised, produced and launched.

Check out my article How to streamline your UI/UX workflow with Figma.

3. Develop your eye for design

Knowing design principles is great, but sometimes it’s not enough, you also have to train your eye to see good design and bad design and to identify strengths and weaknesses in designs.

The most effective way to train your eye for design is through inspiration.
Before opening a blank canvas and staring at it for half an hour, know that the only way to be creative is through research. Sometimes the mind can’t create ideas on its own, you have to first look at other designs to start creating your own, especially when you’re a beginner.

So look at what other designers are doing on Dribbble, and whenever you come across pretty designs or something relevant to your project, save it in your notes and mention what you like about it, you can also take screenshots. This way, you will have a collection of inspirational designs for you to start from.

Here are my favorite websites for inspiration:

4. Read design articles everyday

To make ourselves get familiar with design, the best way is to read a few articles each day.

Make reading design news and blog an everyday habit. There are millions of articles available online for us to discover about new trends, use cases and tutorials. All we have to do is find them. There’s nothing better than learning from other people’s experiences.

So start your day with a cup of coffee and a few inspirational articles on Medium or Smashing Magazine. Learning new things in the morning will broaden your mind and will make room for creativity during the day.

Then, every now and then during your day, take a few breaks to read more. Taking breaks is very important for creativity, especially when you get stuck and feel unproductive. Bookmark the website you like as your browser homepage or subscribe to a design newsletter.

Here are my favorite blog and news websites for design:

5. Design fake projects.

Practice makes perfect. And we all know we can’t get clients/jobs without experience. But without a job or projects, we can’t practice, right?

But we can break this cycle by practicing on our own, by creating fake projects for fun! Dribbble is full of it.


Facebook Material Design by Kevin McCarthy

Make time to pick a website or app you already use and redesign it. It could be anything you think it can be better. You can also design your own app idea.

From this, you’ll build your design portfolio and you’ll practice design.

6. Learn the latest web design tools.

There are tons of design tools out there, but you don’t need to know all of them. Get to know the best ones out there, choose your favorites and stay updated with the newest features and trends.

Here are the latest tools that I use in my design process:

7. Mentor and get mentored.

Another great way to learn design is to find a design mentor or designer friend who is willing to help. They will help you speed up your learning process.

The designer would review your work and give their comments whenever possible. It’s like a shortcut. They would also give you tips and tricks they learned from their experience. So go ahead and e-mail a designer, ask questions and discuss your concerns.

Also, from the few years that I taught design and front-end, I learned more than I taught. When you’re ready to start talking about design with people, you can mentor or educate someone about design. You will learn to see it from a different perspective and you will get feedback and questions that you might’ve never thought about.

Whenever you’re talking about design with other people, your mind will be in “brainstorm” mode all the time and you will find yourself getting interested in design more and more.

Check out myAwesome Web Design github repository, a curated list of resources for web designers.

If you liked this post, make sure to give me some 👏 below and follow my blogfor more design articles. Also, say hi on Twitter 🙋🏽‍

Images source: pexels.com

منبع

چگونه گذشته را رها کنیم ؟

چگونه گذشته رو رها کنیم؟

معمولا ما بعد از تجربه هر شکست به گذشته نگاه می کنیم، به عکس های قدیمی و پیام هایی که یاد آور خاطرات خوش گذشته هستند.

همه ما می دانیم که این کار به ما کمکی نمی کند و با اینکه ما رو با غم و اندوهی مواجه می کند که با آن آشنا هستیم ، اما به طرز باور نکردنی باعث آرامش ما می شود.به عنوان مثال دیدن کارتون های زمان بچگی و احساسی که هنگام دیدن آنها داریم، می تواند یک مثال خوب برای این موضوع باشد.

یک روز وقتی داشتم فایل هایم را از کامپیوتر قدیمیم به لپ تابم انتقال می دادم، به طور تصادفی همه فایل ها رو حذف کردم، بیش از 9 سال عکس و خاطره در یک لحظه پاک شد.

الان تقریبا 4 سال و نیم از زمانی که پوشه را حذف کرده ام می گذرد و باید بگویم که از این اتفاق خوشحالم.

اگر این اتفاق نمی افتاد ممکن بود هنوز به یاد گذشته می افتادم  و کسی چه  میداند که آیا  می تواستم به فردی که الان هستم تبدیل شوم یا نه  ؟

با نگاهی به تمام تجربیات، من متوجه شدم که تنها راه ایجاد یک آینده امیدوارانه این است که، گذشته را ترک کنید، ممکن است  الان احساس خوبی داشته باشیم، وقتی به گذشته فکر میکنیم اما چه اتفاقی می افتد، زمانی که دیگر این احساس خوب نباشد ؟

گاهی اوقات بهتر است  از همه چیز بگذریم  از هر چیزی که مربوط به گذشته است و آنها را حذف کنیم  مانند عکسها ، پیام ها ، ایمیل ها و هرچیزی دیگری از گذشته را حذف کنیم

این ممکن است یکی از سخت ترین کارهایی باشد که باید انجام دهید، اما هرچه زودتر این کار را انجام دهید، هرچه زودتر فرصتی برای بازسازی زندگی خود را بسازید.

 

منبع

شهر من

اگر شهر مالِ من بود،

 

در هر خیابانش یک بغل فروشی تأسیس میکردم که اگر پاییز بود و

نمِ باران و

یک دنیا برگِ زردِ ریخته از درخت و

یک دل که پر از دلتنگیست…

جایی باشد برای دقیقه ای در آغوش کشیده شدن و ثانیه ای آرامش و لحظه ای امنیت…

آری من اگر بودم،

به جای این همه درمانگاه و مریض خانه،

در هر خیابان فقط یک بغل فروشی میزدم و تمام …..

#شیما_بهزاد

معرفی بانک های سیستمی در SQL Server

سلام در این پست به معرفی بانکهای سیستمی که به طر پیشفرض در هر نسخه ای از SQL Server که نصب می کنید وجود دارند. می پردازیم. بانک های سیستمی موجود دارای اهمیت بالایی هستند به گونه ای که برای نگه داری از آنها باید به طور مرتب از آنها نیز پشتیبان بگیرید. این بانک ها اجزای جدایی نا پذیر از SQL Server هستند پس بیاید با هم در مورد آنها با هم یاد بگیریم.

  • Master
  • Model
  • MSDB
  • Tempdb
  • Resource
  • Distribution
اگر به نسخه SQL Server نصب شده خود دقت کنید دو دیتابیس آخر در لیست دیتا بیس های سیستمی نشان داده نمی شوند ولی وجود دارند

 

دیتابیس Master

این دیتابیس برای هر نسخه از SQL Server لازم و حیاتی است زیرا اطلاعات مهمی در این دیتا بیس ذخیره می شود از جمله کلیه اطلاعات سیستمی،اطلاعات Login ها و اسامی بانک های موجود در سرور.

یکی از نکاتی که باید همیشه به آن توجه کنیم این است که حتما باید از این دیتا بیس نسخه پشتیبان   داشته باشیم

 

دیتابیس Model

این بانک اطلاعاتی یک الگو برای ایجاد سایر بانک های اطلاعاتی می باشد. زمانی که شما یک بانک اطلاعاتی جدید ایجاد می کنید الگوی ساخت بانک اطلاعاتی بانک اطلاعاتی Model می باشد. لازم به ذکر است که از این الگو SQL Server به طور خودکار استفاده می کند. به عنوان مثال اگر شما در این دیتا بیس یک یا دوتا جدول ایجاد کنید، تمامی دیتا بیس هایی که از این به بعد ساخته می شوند از این مدل پیروی کرده و این جداول را دارا خواهند بود.

پشتیبان گرفتن از این مورد امری اختیاری و کاملا وابسه به کسب و کار شما می باشد

 

دیتابیس MSDB

در این بانک اطلاعاتی تنظیمات مربوط به Jobها، زمان بندی، Alertها،تاریخچه Backup and Restore ، ایمیل سرور و لاگ های SQL Server قرار میگیرد.

از این دیتابیس هم باید به طور منظم  نسخه پشتیبان   داشته باشیم

 

دیتابیس Tempdb

این بانک اطلاعاتی به عنوان چرکنویس برای SQL Server در نظر گرفته شده و شامل اشیاء موقتی است که SQL Server هنگام کار به آن نیاز خواهد داشت. تنظیم درست این بانک اطلاعاتی بر روی سرور شما می توان باعث افزایش کارایی گردد.

تهیه نسخه پشتیبان از این دیتا بیس لازم نیست

 

دیتابیس Resources

کانکشن استرینگ برای SQLExpress

سلام من اخیرا درگیر ارائه دمو از یکی از پروژه هام بودم و نمی توانستم رشته اتصال رو به گونه ای تنظیم کنم که برنامه من بتواند از از فایل mdf دیتا رو بخونه برای همین مشکل داشتم و خیلی دنبال این موضوع بودم تا اینکه مراحل این کار رو پیدا کردم امیدوارم برای شما هم مفید باشد.

برنامه رو در حالت عادی تست کنید تا متوجه شوید که به درستی با بانک در حالت عادی کار میکند

بعد نوبت به انتقال بانک به نسخه sql اکسپرس می باشد

دیتا بیس را از نسخه اکپرس detach کنید

فایل های دیتا بیس را در پوشه برنامه خود کپی کنید

و در نهایت رشته اتصال خودتون رو هم ویرایش کنید

<add name=”MahanAccountingEntities” connectionString=”metadata=res://*/Model.Model1.csdl|res://*/Model.Model1.ssdl|res://*/Model.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS2016;User Instance=True;AttachDBFilename=|DataDirectory|\MahanAccounting.MDF;Integrated Security=True;MultipleActiveResultSets=True&quot;” providerName=”System.Data.EntityClient”/>