<style> div,.content,table.main { color: red; } </style> <div>Text 1</div> <p>Text 2</p> <table class="main" border="1"> <tr> <td>Cell 1</td> <td>Cell 2</td> <td>Cell 3</td> </tr> <tr> <td>Cell 4</td> <td>Cell 5</td> <td>Cell 6</td> </tr> </table> <span class="content">Text 3</span> <h1>Text 4</h1>
|
|
|
|
| Selector | نسخه CSS |
Yes | Yes | Yes | Yes | Yes | S1,S2 | 1 |
<style> .content .tag { color: red; } h1#index { color: blue; } ul.list li.even { color: green; } </style> <h1 id="index">Index</h1> <h1>Header 1</h1> <div class="content"> Lorem ipsum dolor sit amet, <span class="tag">consectetuer</span> adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, <span class="tag">sit</span> amet commodo magna eros quis urna. Nunc viverra <span class="tag">imperdiet</span> enim. Fusce est. </div> <h1>Header 2</h1> <div class="content"> <ul class="list"> <li>Item 1</li> <li class="even">Item 2</li> <li>Item 3</li> <li class="even">Item 4</li> <li>Item 5</li> <li class="even">Item 6</li> </ul> </div>
12- [attribute]
<style> [readonly] { background: green; } </style> <input type="text" value="Value 1" readonly="readonly"/> <input type="text"/>
|
|
|
|
| Selector | نسخه CSS |
3.1 | 9.6 | 7.0 | 2.0 | 4.0 | [attribute] | 2 |
13- [attribute=value]
<style> [lang=fa] { direction:rtl; } </style> <div lang="fa">متن 1</div>
|
|
|
|
| Selector | نسخه CSS |
3.1 | 9.6 | 7.0 | 2.0 | 4.0 | [attribute=value] | 2 |
14- [attribute=value i]
<style> [lang=fa] { direction:rtl; } </style> <div lang="FA">متن 1</div>
|
|
|
|
| Selector | نسخه CSS |
No | No | No | No | No | [attribute=value i] | 4 |
15- [attribute|=value]
<style> [class|=info] { color:red } </style> <div class="info">Text 1</div> <div class="infobar">Text 2</div> <div class="info bar">Text 3</div> <div class="info-bar">Text 4</div> <div class="btninfo">Text 5</div> <div class="btn info">Text 6</div> <div class="btn-info">Text 7</div> <div class="toolinfoicon">Text 8</div> <div class="tool info icon">Text 9</div> <div class="tool-info-icon">Text 10</div>
|
|
|
|
| Selector | نسخه CSS |
3.1 | 9.6 | 7.0 | 2.0 | 4.0 | [attribute|=value] | 2 |
16- [attribute^=value]
<style> [class^=info] { color: red; } </style> <div class="info">Text 1</div> <div class="infobar">Text 2</div> <div class="info bar">Text 3</div> <div class="info-bar">Text 4</div> <div class="btninfo">Text 5</div> <div class="btn info">Text 6</div> <div class="btn-info">Text 7</div> <div class="toolinfoicon">Text 8</div> <div class="tool info icon">Text 9</div> <div class="tool-info-icon">Text 10</div>
|
|
|
|
| Selector | نسخه CSS |
3.2 | 9.6 | 7.0 | 3.5 | 4.0 | [attribute^=value] | 3 |
17- [attribute~=value]
<style> [class~=info] { color: red; } </style> <div class="info">Text 1</div> <div class="infobar">Text 2</div> <div class="info bar">Text 3</div> <div class="info-bar">Text 4</div> <div class="btninfo">Text 5</div> <div class="btn info">Text 6</div> <div class="btn-info">Text 7</div> <div class="toolinfoicon">Text 8</div> <div class="tool info icon">Text 9</div> <div class="tool-info-icon">Text 10</div>
|
|
|
|
| Selector | نسخه CSS |
3.1 | 9.6 | 7.0 | 2.0 | 4.0 | [attribute~=value] | 2 |
18- [attribute*=value]
<style> [class*=info] { color: red; } </style> <div class="info">Text 1</div> <div class="infobar">Text 2</div> <div class="info bar">Text 3</div> <div class="info-bar">Text 4</div> <div class="btninfo">Text 5</div> <div class="btn info">Text 6</div> <div class="btn-info">Text 7</div> <div class="toolinfoicon">Text 8</div> <div class="tool info icon">Text 9</div> <div class="tool-info-icon">Text 10</div>
|
|
|
|
| Selector | نسخه CSS |
3.2 | 9.6 | 7.0 | 3.5 | 4.0 | [attribute*=value] | 3 |
19- [attribute$=value]
<style> [class$=info] { color: red; } </style> <div class="info">Text 1</div> <div class="infobar">Text 2</div> <div class="info bar">Text 3</div> <div class="info-bar">Text 4</div> <div class="btninfo">Text 5</div> <div class="btn info">Text 6</div> <div class="btn-info">Text 7</div> <div class="toolinfoicon">Text 8</div> <div class="tool info icon">Text 9</div> <div class="tool-info-icon">Text 10</div>
|
|
|
|
| Selector | نسخه CSS |
3.2 | 9.6 | 7.0 | 3.5 | 4.0 | [attribute$=value] | 3 |
در این کتاب روش حل مسائل مختلف با توجه به توانایی زبانهای برنامه نویسی آموزش داده میشوند.
Chapter 1: Strategies for Problem Solving Chapter 2: Pure Puzzles Chapter 3: Solving Problems with Arrays Chapter 4: Solving Problems with Pointers and Dynamic Memory Chapter 5: Solving Problems with Classes Chapter 6: Solving Problems with Recursion Chapter 7: Solving Problems with Code Reuse Chapter 8: Thinking Like a Programmer
As you may remember, Microsoft has removed the IE Mode feature from Microsoft Edge. THe company has limited it to enterprise customers and IT admins. They have also stated that the feature was released to the public for testing purposes only. Here is a bit of good news - you can re-enable IE Mode when needed with recent versions of Edge!
Generators در ES 6
یک نمونه مثال ابتدایی از Generators را در کدهای زیر مشاهده میکنید:
function* generator () { yield 1; // pause yield 2; // pause yield 3; // pause yield 'done?'; // done }
let gen = generator(); // [object Generator] console.log(gen.next()); // Object {value: 1, done: false} console.log(gen.next()); // Object {value: 2, done: false} console.log(gen.next()); // Object {value: 3, done: false} console.log(gen.next()); // Object {value: 'done?', done: false} console.log(gen.next()); // Object {value: undefined, done: true} console.log(gen.next()); // Object {value: undefined, done: true}
و یا میتوان بجای فراخوانی دستی متد next، از حلقهی جدید for of نیز برای کار با آنها استفاده کرد:
for (let val of generator()) { console.log(val); // 1 // 2 // 3 // 'done?' }
function* random (max) { yield Math.floor(Math.random() * max) + 1; } function* random1_20 () { while (true) { yield* random(20); } } let rand = random1_20(); console.log(rand.next()); console.log(rand.next());
فقط در این حالت بجای yield معمولی از *yield استفاده میشود. از *yield برای کار با هر نوع Iterator ایی میتوان استفاده کرد:
function* multiplier (value) { yield value * 2; yield value * 3; yield value * 4; yield value * 5; } function* trailmix () { yield 0; yield* [1, 2]; yield* [...multiplier(2)]; yield* multiplier(3); }
کاهش مصرف حافظهی برنامه با استفاده از Generators
در مثال زیر، قرار است لیستی از rows بازگشت داده شود. در اینجا یک آرایه تشکیل شده و هربار اطلاعاتی به آن push میشود و در نهایت این آرایه بازگشت داده خواهد شد:
function splitIntoRows(icons, rowLength) { var rows = []; for (var i = 0; i < icons.length; i += rowLength) { rows.push(icons.slice(i, i + rowLength)); } return rows; }
function* splitIntoRows(icons, rowLength) { for (var i = 0; i < icons.length; i += rowLength) { yield icons.slice(i, i + rowLength); } }
روشهایی برای خاموش کردن Generators
Generators علاوه بر متد next، دارای متدهای return و throw نیز هستند.
فراخوانی (generator.throw(error همانند این است که در بین کار، به متدی برخوردهایم که استثنایی را صادر کردهاست و سبب خاتمهی کار Generator شدهاست.
اگر متد return آنها فراخوانی شود، کار Generator پایان مییابد (خاصیت done شیء بازگشتی بلافاصله true میشود) و فراخوانی next، پس از آن، دیگر اثری نخواهد داشت:
function* numbers () { yield 1 yield 2 yield 3 } var g = numbers() console.log(g.next()) // <- { done: false, value: 1 } console.log(g.return()) // <- { done: true } console.log(g.next()) // <- { done: true }, as we know
function* numbers () { yield 1 yield 2 return 3 yield 4 } console.log([...numbers()]) // <- [1, 2]
اگر به متد return خود Generator، پارامتری ارسال شود، این مقدار، مقدار نهایی بازگشت داده شده خواهد بود:
function* numbers () { yield 1 yield 2 return 3 yield 4 } var g = numbers() console.log(g.next()) // <- { done: false, value: 1 } console.log(g.return(5)) // <- { done: true, value: 5 } console.log(g.next()) // <- { done: true }
در حالتیکه به متد return پارامتری ارسال میشود، قسمت finally بدنهی try/finally نوشته شده حتما اجرا خواهد شد و سپس کار خاتمه پیدا میکند:
function* numbers () { yield 1 try { yield 2 } finally { yield 3 yield 4 } yield 5 } var g = numbers() console.log(g.next()) // <- { done: false, value: 1 } console.log(g.next()) // <- { done: false, value: 2 } console.log(g.return(6)) // <- { done: false, value: 3 } console.log(g.next()) // <- { done: false, value: 4 } console.log(g.next()) // <- { done: true, value: 6 }
برای استفاده از این مزایا باید سرویس Microsoft SharePoint Foundation User Code Service فعال باشد .
استفاده از Sandbox Solution نیازمند 3 چیز است :
1 - User Code Service یا SPUCHostService.exe : این سرویس وظیفه مدیریت کدهای Sandbox روی سرور و میزبانی درخواستهای Sandbox به سرور را دارد.
2 - Sandbox Worker Process یا SPUCWorkerProcess.exe : این سرویس برای مدیریت پردازش کدهای اجرایی Sandbox استفاده میشود خصوصا در مورارد امنیتی (فرض کنید درون کد حلقه بی نهایتی وجود داشته باشد. اگر بار اجرایی آن بر روی w3wp.exe باشد ، باعث متوقف شدن کارکرد تمام پروسه میشود. بار این مسئولیت بر دوش SPUCWorkerProcess.exe میباشد )
3 - Sandbox Worker Process Proxy یا SPUCWorkerProcessProxy.exe : این سرویس برای اجرای کدهای Client Object Model در sandbox استفاده میشود.
می توانید ارتباط پردازههای فوق را در نمودار زیر مشاهد کنید :
با توجه به این توضیحات به دلیل استفاده از Sandbox میپردازیم :
1 - sandbox Solutionها امن هستند.
2 - sandbox Solutionها میتوانند مانیتور شوند.
3 - sandbox Solutionها حداقل تاثیر را روی هم دارند.
4 - sandbox Solutionها عملیات I/O کمی روی فایلهای سیستمی دارند
5 - sandbox Solutionها امکان debugging دارند
6 - sandbox Solutionها امکان توسعه ، انتشار و به روز رسانی دارند
7 - sandbox Solutionها امکان تعریف Policy برای CAS ایجاد میکند (Code Access Security برای قابل اطمینان ساخت کد ها)
8 - sandbox Solutionها امکان اعتبار سنجی به کمک کلاس SPSolutionValidator را میدهد.
9 - sandbox Solutionها امکان تعریف SLA های مختلف را میدهد.
چه قسمت هایی توسط Sandbox Solution پشتیبانی میشود :
هنگام ایجاد یک پروژه از نوع sandbox در ویژوال استودیو ، یکسری امکانات از برنامه نویس سلب میشود و محدودیتهای برای استفاده از کلاسها برای وی اعمال میشود .موارد زیر ، از جمله مواردی هستند که توسعه دهنده میتواند از آنها در sandbox استفاده کند :
Add-SPSolution c:\code\SharePointProject2\bin\debug\SharePointProject2.wsp
stsadm –o addsolution –name SharePointProject2.wsp
سری آموزشی مقدماتی Web API
Our beginner's guide to building Web APIs with ASP.NET Core is designed to provide you with the foundation you need to start building Web APIs with .NET in a collection of short, pragmatic collection of videos. Web APIs have become a critical component in almost every type of software we use today. In this introductory video series, we will walk you through the fundamental concepts you need to know to get started with building Web APIs using ASP.NET Core. We will cover topics such as routing, validation, working with data, and much more.