Martin Bodocky

No less, no more. Just live between code.

70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions – Preparation links

Hello guys,

This list is not exhaustive, and i will still try to polish some links and add new ones, As you can see I haven’t covered all topics like monitoring of scalability of issues.

Please let me know if something is not correct, this is also my main source to learn, I haven’t passed the exam yet.

I hope this information helps you,  I’m quite excited about this :)

Design and Implement Search (15-20
percent)

Query Search.

  • build search queries using FQL (FAST Query Language) and
    KQL (Keyword Query Language)

Customize search
results.

Customize content
processing.

  • implement content processing extensions (entity
    extraction)

Implement BCS (Business Connectivity
Services) (10-15 percent)

General information: http://msdn.microsoft.com/en-us/library/jj163782.aspx

Create a model.

Create external
content types.

  • use WCF (Windows Communication Foundation) (like 2010,
    deprecated?)

Implement
authorization and authentication.

  • use pass-through
  • use BCS Identity and User Identity
  • use a custom model

Create custom
connectors.

  • implement methods (including Search)
  • implement security trimming
  • implement configuration properties
  • implement caching

Access BCS data.

  • use BCS Web Parts
  • use BCS data in workflows
  • use the server-side object model

Implement
client-side BCS.

  • use caching
  • use Microsoft Office apps
  • use Microsoft Visual Studio Tools for Office
  • use SQL replication
  • implement authorization and authentication

Implement User Profiles and Customize
Social Workload (15-20 percent)

Manage user profile
properties.

Manage feeds.

Access user profile
data.

  • use Web Services (deprecated)

Implement ECM (Enterprise Content
Management) and WCM (Web Content Management) (15-20 percent)

Implement a
multi-lingual site.

  • publish pages
  • create source and target labels
  • create channels
  • implement multi-language site navigation

Implement
E-discovery.

  • export discovery sets
  • manage permissions for hold

Implement SEO
(Search Engine Optimization).

  • customize a site map
  • maintain SEO configuration properties
  • maintain SEO properties on term

Implement content
management.

  • create information management policies (the same as
    2010)

Implement a
publishing page.

  • add field controls to a page layout
  • add web parts to a page layout
  • inherit content types

Design for Performance and
Troubleshooting (15-20 percent)

Design solutions to
handle a high-traffic site.

  • create a scalable aggregator(?)

Design client
applications for performance.

Monitor and mitigate
performance and scalability issues.

Implement Managed Metadata Service (MMS) (15-20 percent)

Generallinks:

http://technet.microsoft.com/en-us/library/ee424403.aspx

http://technet.microsoft.com/en-us/library/ee519603.aspx

http://msdn.microsoft.com/en-us/library/jj163949.aspx

Manage term sets.

  • re-use terms
  • manage term properties
  • perform translation
  • create groups and assign permissions

Create solutions by
using MMS.

  • use Profile Pages
  • use the Product Catalog

Use an MMS API.

  • use REST in client applications
  • use managed fields

70-488 Developing Microsoft SharePoint Server 2013 Core Solutions – Preparation links

Wrap Web Part Title in SharePoint 2013

Dear reader,

you probably know how it is spend a lot of time on one design issue and then you find solution.

Do not confuse yourself with google with SharePoint 2007/2010 stuff like:

.ms-WPTitle nobr { white-space: normal !important; }
or
.ms-WPHeaderTD nobr { word-wrap: break-word !important; white-space: wrap !important; }

The SharePoint 2013 working version:

.ms-webpart-titleText nobr span {white-space:normal !important;}

I hope it helps!

Having a great patience with SharePoint 2013 :)

SharePoint 2013 Developer Certifications are out! (Unofficial)

Hello dear reader,

I hope you are excited as I am. The new SharePoint 2013 certification for developers are out!

Today we can see, whole certification path for SharePoint developers. The new title is

Microsoft Certified Solutions Developer (MCSD): SharePoint Applications

It contains two ways, one for front-end and one for back-end:

Frond-end contain:

Back-end contain:

  • 70-488 Developing Microsoft SharePoint Server 2013 Core Solutions

    (syllabus)

  • 70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions

    (syllabus)

The last two are still in development, but I hope it will be available some beta exams.

I hope this information make you happier!

KeywordQuery doesn’t work or confusion between search namespaces

Hello all,

Today I have survived the huge confusion, I wanted create a simple server side functionality for search on SharePoint 2013. Please look on following code which was mentioned not working with exception:

Your search cannot be completed because no Search service is available. Contact your administrator for more information.

p33

I thought what is that? What can I do? I have checked central admin, all seem to be right, I have tried google, someone said in case of SharePoint 2010, it’s broken. Ok I have recreated search service application, and it was still there.

In the first time I saw that KeywordQuery is marked as obsolete with nice message “This class is obsolete now. It will be totally removed in O16 codebase and should not be used in new applications.”. I thought fine this is not version O16, they just try to scare us, but no this object doesn’t work at all!

After more digging and searching I found the solution, I have used all time this wrong assembly. The updated class for using search functionality is Microsoft.Office.Search.Query, they removed word Office from product but still is heavily using in API.(as you can see my previous post about client side query there is used KeywordQuery from Microsoft.SharePoint.Client.Search.Query which was even more questionable).

The solution is just replace these assemblies and be careful which assembly you are going to reference to your solution:

using System;
using System.Data;
using System.Linq;
using Microsoft.Office.Server.Search.Query;
using Microsoft.SharePoint;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite siteCollection = new SPSite("http://siteUrl/"))
            {
                KeywordQuery keywordQuery = new KeywordQuery(siteCollection);
                keywordQuery.QueryText = "PopulateNewFields";
                SearchExecutor searchExecutor = new SearchExecutor();

                ResultTableCollection resultTableCollection = 
                    searchExecutor.ExecuteQuery(keywordQuery);
                var resultTables = resultTableCollection.Filter("TableType", 
                    KnownTableTypes.RelevantResults);
                var resultTable = resultTables.FirstOrDefault();

                DataTable dataTable = resultTable.Table;

                foreach (DataRow resultRow in dataTable.Rows)
                {
                    Console.WriteLine("{0}", resultRow["Title"]);
                }
            }
            Console.ReadLine();
        }
    }
}

I hope it helps, if you have any queries just let me know.

Happy coding!

SharePoint 2013 Search by Client Object Model in C#

Today I have found nice way how to search on your SharePoint 2013 Online, and it is easy clean and nice. I won’t describe in more detail, just show you one little example which I hope it helps you to broaden your awareness about new SharePoint 2013 Search.

static void Main(string[] args) 
        { 
            string targetSite = @"https://xxx.sharepoint.com/"; 
            string loginName = "bbb@aaa.onmicrosoft.com"; 
            string passWord = "ccc"; 

            //we need use SecureString 
            SecureString securePassword = new SecureString(); 
            passWord.ToCharArray().ToList().ForEach(c => securePassword.AppendChar(c)); 

            using (ClientContext ctx = new ClientContext(targetSite)) 
            { 
                //new approach how to use your SharePoint Online Credentials 
                ctx.Credentials = new SharePointOnlineCredentials(loginName, securePassword); 

                KeywordQuery keywordQry = new KeywordQuery(ctx); 
                //query string 
                keywordQry.QueryText = "Test"; 

                SearchExecutor searchExecutor = new SearchExecutor(ctx); 
                //don't forget to wrap with ClientResult and call ExecuteQuery 
                ClientResult results = searchExecutor.ExecuteQuery(keywordQry); 
                ctx.ExecuteQuery(); 

                foreach (var resultRow in results.Value[0].ResultRows) 
                { 
                    Console.WriteLine("{0}", resultRow["Title"]); 
                    //for more colums to uncomment 
                    //Console.WriteLine("{0}: {1} ({2})", resultRow["Title"], resultRow["Path"], resultRow["Write"]); 
                } 
                Console.ReadLine(); 
            } 
        }

Next just proven that gives you the correct results:

clientSearch

Finnally if you want to use this approach for your SharePoint 2013 instance, just omit the credential line.

Let’s get searching!

JavaScript – How magic can keyword ‘this’ be?

The Introduction

This article will hopefully save your day. If you are JavaScript beginner, by having read this article, you might find it enlightening and might help you removing confusion which I was going through when registering events on my HTML elements.

The Problem

One of the most powerful JavaScript keyword is ‘this’. Unfortunately it is hard to use it if you don’t exactly know how it works.

The Solution

Here we will be going via more approaches how to deal with ‘this’ keyword and where all that confusion comes up.

Owner

What does ‘this’ refer to in the function doSomething()?

function doSomething() {
this.style.color = '#cc0000';
}

In JavaScript ‘this’ always refers to the owner of the function we are executing, or rather, to the object that a function is a method of. When we define our faithful function doSomething() in a page, its owner is the page, or rather, the window object(or global object) of JavaScript. An onclick property though, is owned by the HTML element it belongs to.

‘this’ in onclick() function looks at HTML element
‘this’ in unattended function looks at page

Coping

So if we want to use ‘this’ to its full extent we have to take care that the function that uses it is owned by the correct HTML element. In other words, we have to copy the function to our onclick property. For this purpose we are using event registration model.

element.onclick = doSomething;

The function is copied in its entirely to the onclick property which now becomes a method. So if the event handler is executed ‘this’ referes to the HTML element and its colour has changed.

Referring

However, If you use inline event registration

<element onclick="doSomething()">

You do not copy the function! Instead, you refer to it, and the difference is crucial. The onclick property does not contain the actual function, but merely a functional call:

doSomething();

So it says ‘go to doSomething()’ and execute it. When we arrive at doSomething() the ‘this’ keyword once again refers to the global window object and the function returns error messages.

Combination

If you want to use ‘this’ for accessing the HTML element that is handling the event, you must make sure that the ‘this’ keyword is actually written into the onclick property. Only in that case does it refer to the HTML element the event handler is registered to. When you write

element.onclick = doSomething;

you get

function doSomething(){
this.style.colr='#cc0000';
}

and when you write

<element onclick="doSomething()">

you get

function onclick(){
doSomething();
}

When using inline event registration you can also send ‘this’ to the function so that you can still use it:

<element onclick="doSomething(this)">

function doSomething(obj) {
//this is present in the event handler and is sent to the function
//obj now refers to the HTML element, so we can do
obj.style.color='#cc0000';
}

The Conclusion

Finally just keep on your mind two questions:

  • How do I register my function to event property? Event registration model or inline?
  • How do I call my function which working with ‘this’ keyword? Is your function unattended?

I hope this helps you to understand the problem and avoid that with smile:)

When TreeView_SelectNode() doesn’t work

Hello all,

Today I have spent  a large amount of time to solve this issue. Let me describe my solution in points:

  • I have just server code, no aspx control
  • I have created treenodes dynamically
  • I have registered javascript in onPreRender  method
  • I have set ShowCheckBoxes to TreeNodeTypes.Leaf
  • Other settings are default, which mean i don not set populateondemand
  • I have set just SelectionAction on root to Expand

I have tried to apply this approach:

window.onload = function(){
     var treeview = document.getElementById("<%=Tree1.ClientID %>");
      var treeLinks = treeview.getElementsByTagName("a");
      for(i=0;i<treeLinks.length;i++)
      {
           if(treeLinks[i].firstChild.tagName != "IMG")
           {
             treeLinks[i].setAttribute("href","javascript:void(0);");
             treeLinks[i].onclick =function(){
             TreeView_SelectNode(<%=Tree1.ClientID %>_Data,this,this.id.toString());
             }          
          }
       }
}

Gathering information from this forum.

My solution is below:

        protected override void OnPreRender(EventArgs e)
        {
            ClientScriptManager csm = this.Page.ClientScript;

            string clientScript = @"
            window.onload = function(){
              var treeview = document.getElementById('" + treeView.ClientID + @"');
              var treeLinks = treeview.getElementsByTagName('a');
              for(i=0;i<treeLinks.length;i++)
              {
                   if(treeLinks[i].firstChild.tagName != 'IMG')
                   {
                     treeLinks[i].setAttribute('href','javascript:void(0);');
                     treeLinks[i].onclick =function(){
                     var parent = this.parentNode;
                     var input = parent.getElementsByTagName('input')[0];
                     var isChecked = input.getAttribute('checked');
                     if(isChecked == '') {
                        input.setAttribute('checked','checked');
                     }
                     else {
                        input.removeAttribute('checked');
                     }
                     }
                  }
               }
         }
";
            csm.RegisterStartupScript(this.GetType(), this.ID, clientScript, true);
            base.OnPreRender(e);
        }

I hope it helps !

70-480 Programming in HTML5 with JavaScript and CSS3 – Preparation links

In this post I will reference official resource for learning and preparing for exam. Also this is study material for me as well. I have spent such a great time to compare other’s preparation links and choose the right one which according to me fulfil the best expectation of new knowledge.

A few words about my knowledge of HTML5/CSS3, I’m not front-end developer I have been trying to prevent to be person who is responsible for design or style of web pages. But time has changed and now I change my mind and force myself to learn it more. Clearly I have a lot of experience with them anyway, I have developed SharePoint applications for four years, last thing which mostly support my decision is SharePoint 2013, as you can see in my latest posts on this topic. One official huge thank you I should to say guys who created video course about in Microsoft Virtual Academy or if you don’t have account you can look on channel9. Also they showed on nice HTML5 application called CodeShow.

Following text is copy and paste from syllabus as “Skill Measured”, all links will be tagged with title of the page which you find when you click on it.

Implement and Manipulate Document Structures and Objects (24%)

  • Create the document structure.
    • This objective may include but is not limited to: structure the UI by using semantic markup, including for search engines and screen readers (Section, Article, Nav, Header, Footer, and Aside);create a layout container in HTML

W3School – section; article; nav; header; footer; aside; HTML layouts
HTML5 doctor – outlines

  • Write code that interacts with UI controls.
    • This objective may include but is not limited to: programmatically add and modify HTML elements; implement media controls; implement HTML5 canvas and SVG graphics

W3School – DOM Element Object; XML DOM; HTML5 canvas; SVG tutorial; HTML5 Audio; HTML5 video

  • Apply styling to HTML elements programmatically.
    • This objective may include but is not limited to: change the location of an element; apply a transform; show and hide elements

W3School – CSS Positioning; HTML DOM Style object; CSS Display; CSS3 2D Transforms; CSS3 3D Transforms; CSS3 Transitions; CSS3 Animations; jQuery Effects
jQUery – jQuery Effect hide() Method;
developerdrive.com – Skewing Web Page Elements Using the CSS3 Skew Transform

  • Implement HTML5 APIs.
    • This objective may include but is not limited to: implement storage APIs, AppCache API, and Geolocation API

W3School – Storage API(Web Storage); AppCache API; Geolocation API

  • Establish the scope of objects and variables.
    • This objective may include but is not limited to: define the lifetime of variables; keep objects out of the global namespace; use the “this” keyword to reference an object that fired an event; scope variables locally and globally

Snook.ca – Scope variables locally and globally
Jibbering.com – Javascript Closure
robertnyman.com – Explaining scopes and closure

  • Create and implement objects and methods.
    • This objective may include but is not limited to: implement native objects; create custom objects and custom properties for native objects using prototypes and functions; inherit from an object; implement native methods and create custom methods

Yaldex.com – implement native objects
javascriptweblog.wordpress.com – Extending JavaScript Natives
Crockford.com- Classical Inheritance JavaScript

Implement Program Flow (25%)

  • Implement program flow.
    • This objective may include but is not limited to: iterate across collections and array items; manage program decisions by using switch statements, if/then, and operators; evaluate expressions

W3School – iterate across collections and array items, for loop; manage program decisions by using switch statemens; if/then; evaluate expressions
JavaScriptkit.com – Looping; Variable and expression shortcuts; switch statement

  • Raise and handle an event.
    • This objective may include but is not limited to: handle common events exposed by DOM (OnBlur, OnFocus, OnClick); declare and handle bubbled events; handle an event by using an anonymous function

W3School – DOM Events; onclick; onblur; onfocus; handle and bubbled events
JavaScripter.com – bubbled events demo
quirksmode.org – advance model registration
W3c.com – DOM Events Specification
JavaScript.info – Bubbling and capturing

  • Implement exception handling.
    • This objective may include but is not limited to: set and respond to error codes; throw an exception; request for null checks; implement try-catch-finally blocks

W3School – try-catch blocks
saladwithsteve.com – undefined vs null
JavaScriptkit.com – try-catch

  • Implement a callback.
    • This objective may include but is not limited to: receive messages from the HTML5 WebSocket API; use jQuery to make an AJAX call; wire up an event; implement a callback by using anonymous functions; handle the “this” pointer

W3.org – WebSocket API;
html5rocks.com – HTML5 WebSocket API
jQuery.com – jQuery.ajax(); jQuery.post(); jQuery.get()
quirksmode.org- keyword this

  • Create a web worker process.
    • This objective may include but is not limited to: start and stop a web worker; pass data to a web worker; configure timeouts and intervals on the web worker; register an event listener for the web worker; limitations of a web worker

W3School – HTML5 Web workers
Mozilla.org – web workers

Access and Secure Data (26%)

  • Validate user input by using HTML5 elements.
    • This objective may include but is not limited to: choose the appropriate controls based on requirements; implement HTML input types and content attributes (for example, required) to collect user input

W3School – HTML input types; HTML form attributes
Diveintohtml5.com – HTML forms

  • Validate user input by using JavaScript.
    • This objective may include but is not limited to: evaluate a regular expression to validate the input format; validate that you are getting the right kind of data type by using built-in functions; prevent code injection

Consultsarath.com – Validate Email by regular expression
CodeProject.com – Understand Regex Expressions
jQuery – Plugins-Validation
stackoverflow – how to prevent code injection; Safe HTML and XSS
owasp.org – XSS filter evasion cheat sheet

  • Consume data.
    • This objective may include but is not limited to: consume JSON and XML data; retrieve data by using web services; load data or get data from other sources by using XMLHTTPRequest

W3C.com – XMLHttpRequest
W3School – XMLHttpRequest object; XML parser
erichynds.com – Working with xml, JavaScript and jQuery
webdevstuff.com – XMLHttpRequest object
json.org- introduction to JSON
stackoverflow – How to parse JSON in JavaScript

  • Serialize, deserialize, and transmit data.
    • This objective may include but is not limited to: binary data; text data (JSON, XML); implement the jQuery serialize method; Form.Submit; parse data; send data by using XMLHTTPRequest; sanitize input by using URI/form encoding

fhtr.blogpost.com – 3D models and parsing binary data with JavaScript
W3School – Json; Xml; Xml http; Xml parser; HTML DOM form object;submit() method; decodeURI() function; decodeURIComponent() function; encodeURI() function; encodeURIComponent() function
jQuery – serialize
JavaScript-coder.com – How to submit a form JavaScript

Use CSS3 in Applications (25%)

  • Style HTML text properties.
    • This objective may include but is not limited to: apply styles to text appearance (color, bold, italics); apply styles to text font (WOFF and @font-face, size); apply styles to text alignment, spacing, and indentation; apply styles to text hyphenation; apply styles for a text drop shadow

W3School – CSS Text; CSS Font; CSS3 Fonts; CSS Links; CSS3 Text Effects; CSS Selector Reference
Nicewebtype.com – How to use font face
W3C.com – CSS Text Module
CSS3.info – box Shadow

  • Style HTML box properties.
    • This objective may include but is not limited to: apply styles to alter appearance attributes (size, border and rounding border corners, outline, padding, margin); apply styles to alter graphic effects (transparency, opacity, background image, gradients, shadow, clipping); apply styles to establish and change an element’s position (static, relative, absolute, fixed)

W3School – CSS Border; CSS3 Border; CSS Box Model; CSS Dimension; CSS Outlines; CSS Margin; CSS Padding; CSS3 Backgrounds; CSS3 background-clip; CSS Image; CSS3 Text Effects; CSS Positioning
css-tricks.com – CSS3 Gradient
net.tutsplus.com – 10 CSS3 properties you Need to be familiar with
ie.microsoft.com/testdrive – CSS gradient background marker
W3C.com – CSS Visual Effects
barelyfitz.com – Learn CSS Positioning in ten steps

  • Create a flexible content layout.
    • This objective may include but is not limited to: implement a layout using a flexible box model; implement a layout using multi-column; implement a layout using position floating and exclusions; implement a layout using grid alignment; implement a layout using regions, grouping, and nesting

W3School – CSS3 box-flex; CSS3 Multiple columns
coding.smashingmagazine.com – CSS3 Flexible box layout explained
zenelements.com – CSS3 Multiple Columns
dev.w3.org – CSS3 Exclusions and Shape Module; CSS Regions Module; CSS3 Grid Layout;
msdn.microsoft.com – CSS Exclusions;
html5rocks.com – flex box;
css3.info – CSS Multiple columns

  • Create an animated and adaptive UI.
    • This objective may include but is not limited to: animate objects by applying CSS transitions; apply 3-D and 2-D transformations; adjust UI based on media queries (device adaptations for output formats, displays, and representations); hide or disable controls

W3School – CSS3 Transitions; CSS3 2D Transforms; CSS3 3D Transforms; CSS Display and Visibility;
W3C.org – CSS3 Media Queries

  • Find elements by using CSS selectors and jQuery.
    • This objective may include but is not limited to: choose the correct selector to reference an element; define element, style, and attribute selectors; find elements by using pseudo-elements and pseudo-classes (for example, :before, :first-line, :first-letter, :target, :lang, :checked, :first-child)

W3School – CSS Selector Reference;
jQuery.com – Selectors
W3C.org – Detailed about selectors; Pseudo-elements and pseudo-classes

  • Structure a CSS file by using CSS selectors.
    • This objective may include but is not limited to: reference elements correctly; implement inheritance; override inheritance by using !important; style an element based on pseudo-elements and pseudo-classes (for example, :before, :first-line, :first-letter, :target, :lang, :checked, :first-child)

htmlhelp.com – CSS Structure and rules;
W3C.org – Assigning property value, Cascading and Inheritance

For those who are preferring book instead of reading web source, I have found a few books which are covering most of this content. They are listed below:

  • JavaScript & jQuery: The missing manual(Amazon)
  • CSS3: The missing manual(Amazon)

I assume that all for resource of this exam, I hope it will help you. I’m using these resources and books for a while now. I will report you my result in exam. Until that point keep learning.

I have done with F# Koans

This is my first metion about F#, I’m not going to write more, just show you I have started paying attention on this language and functional programming as well.

What’s the F# Koans?

It is solution which giving you tasks to solve, more information about this particular one is here.

Big thank you Chris Marinos.

Result 2012-03-13

about asserts:
    AssertExpectation passed
    FillInValues passed

about let:
    LetBindsANameToAValue passed
    LetInfersTheTypesOfValuesWherePossible passed
    YouCanMakeTypesExplicit passed
    FloatsAndInts passed
    ModifyingTheValueOfVariables passed
    YouCannotModifyALetBoundValueIfItIsNotMutable passed

about functions:
    CreatingFunctionsWithLet passed
    NestingFunctions passed
    AddingTypeAnnotations passed
    VariablesInTheParentScopeCanBeAccessed passed

about the order of evaluation:
    SometimesYouNeedParenthesisToGroupThings passed
    TheBackwardPipeOperatorCanAlsoHelpWithGrouping passed

about unit:
    UnitIsUsedWhenThereIsNoReturnValueForAFunction passed
    ParameterlessFuncitonsTakeUnitAsTheirArgument passed

about tuples:
    CreatingTuples passed
    AccessingTupleElements passed
    AccessingTupleElementsWithPatternMatching passed
    IgnoringValuesWithPatternMatching passed
    ReturningMultipleValuesFromAFunction passed
    TheTruthBehindMultipleReturnValues passed

about strings:
    StringValue passed
    StringConcatValue passed
    FormattingStringValues passed
    FormattingOtherTypes passed
    FormattingAnything passed
    CombineMultiline passed
    Multiline passed
    ExtractValues passed
    ApplyWhatYouLearned passed

about branching:
    BasicBranching passed
    IfStatementsReturnValues passed
    BranchingWithAPatternMatch passed
    UsingTuplesWithIfStatementsQuicklyBecomesClumsy passed
    PatternMatchingIsNicer passed

about lists:
    CreatingLists passed
    BuildingNewLists passed
    ConcatenatingLists passed
    CreatingListsWithARange passed
    CreatingListsWithComprehensions passed
    ComprehensionsWithConditions passed
    TransformingListsWithMap passed
    FilteringListsWithWhere passed
    DividingListsWithPartition passed

about pipelining:
    SquareEvenNumbersWithSeparateStatements passed
    SquareEvenNumbersWithParens passed
    SquareEvenNumbersWithPipelineOperator passed
    HowThePipeOperatorIsDefined passed

about arrays:
    CreatingArrays passed
    ArraysAreDotNetArrays passed
    ArraysAreMutable passed
    YouCanCreateArraysWithComprehensions passed
    ThereAreAlsoSomeOperationsYouCanPerformOnArrays passed

about dot net collections:
    CreatingDotNetLists passed
    CreatingDotNetDictionaries passed
    YouUseCombinatorsWithDotNetTypes passed
    SkippingElements passed
    FindingTheMax passed
    FindingTheMaxUsingACondition passed

about looping:
    LoopingOverAList passed
    LoopingWithExpressions passed
    LoopingWithWhile passed

more about functions:
    DefiningLambdas passed
    FunctionsThatReturnFunctions passed
    AutomaticCurrying passed
    NonCurriedFunctions passed

about the stock example:
    YouGotTheAnswerCorrect passed

about record types:
    RecordsHaveProperties passed
    CreatingFromAnExistingRecord passed
    ComparingRecords passed
    YouCanPatternMatchAgainstRecords passed

about option types:
    OptionTypesMightContainAValue passed
    OrTheyMightNot passed
    UsingOptionTypesWithPatternMatching passed
    ProjectingValuesFromOptionTypes passed

about discriminated unions:
    DiscriminatedUnionsCaptureASetOfOptions passed
    DiscriminatedUnionCasesCanHaveTypes passed

about modules:
    ModulesCanContainValuesAndTypes passed
    ModulesCanContainFunctions passed

about opened modules:

about classes:
    ClassesCanHaveProperties passed
    ClassesCanHaveMethods passed
    ClassesCanHaveConstructors passed
    ClassesCanHaveLetBindingsInsideThem passed
    ClassesCanHaveReadWriteProperties passed

Press any key to continue...
Follow

Get every new post delivered to your Inbox.