Source: How to Access Your Ubuntu Bash Files in Windows (and Your Windows System Drive in Bash)
TypeScript vs. C#: LINQ
TypeScript counterparts for C# LINQ.
Source: TypeScript vs. C#: LINQ
All of below are copied from https://decembersoft.com in case that blog post disappears in future, I save it here for time keeping. Let me know if its a problem.
TypeScript has no equivalent for the language-integrated-natural-query aspect of LINQ. (hey, isn’t that literally the whole acronym?)
True, you can’t write the following LINQ statement in TypeScript
var adultUserNames = from u in users where u.Age >= 18 select u.Name;
However, the IEnumerable<T>
extension methods, which are at the heart of LINQ, have equivalents in TypeScript (or can be emulated).
- Aggregate
- All
- Any
- Append
- Average
- Cast
- Concat
- Contains
- Count
- DefaultIfEmpty
- Distinct
- ElementAt
- ElementAtOrDefault
- Empty
- Except
- First
- FirstOrDefault
- List.ForEach
- GroupBy
- Intersect
- Last
- LastOrDefault
- Max
- Min
- OfType
- OrderBy / ThenBy
- Reverse
- Select
- SelectMany
- Single
- SingleOrDefault
- Skip
- SkipWhile
- Sum
- Take
- TakeWhile
- Union
- Where
- Zip
Aggregate
// C#var leftToRight = users.Aggregate(initialValue, (a, u) => /* ... */);
// TypeScriptconst leftToRight = users.reduce((a, u) => /* ... */, initialValue);const rightToLeft = users.reduceRight((a, u) => /* ... */, initialValue);
All
// C#var allReady = users.All(u => u.IsReady);
// TypeScriptconst allReady = users.every(u => u.isReady);
Any
// C#var isDirty = users.Any(u => u.IsDirty);
// TypeScriptconst isDirty = users.some(u => u.isDirty);
Append
// C#var allUsers = users.Append(oneMoreUser);
// TypeScriptconst allUsers = [ ...users, oneMoreUser ];
Average
// C#var avgAge = users.Average(u => u.Age);
// TypeScriptif (users.length < 1) { throw new Error('source contains no elements');}const avgAge = users.reduce((a, u) => a + u.age, 0) / users.length;
Cast
// C#var people = users.Cast<Person>();
// TypeScriptconst people = users as Person[];// Note: not semantically the same. The C# version throws an exception// if any of the users can't be cast to type Person.
Concat
// C#var allUsers = users.Concat(moreUsers);
// TypeScriptconst allUsers = [ ...users, ...moreUsers ];
Contains
// C#var hasAdmin = users.Contains(admin);
// TypeScriptconst hasAdmin = users.includes(admin); // Use a polyfill for IE support
Count
// C#var n = users.Count();
// TypeScriptconst n = users.length;
DefaultIfEmpty
// C#var nonEmptyUsers = Enumerable.DefaultIfEmpty(users);
// TypeScriptconst nonEmptyUsers = users.length ? users : [ null ];
Distinct
// C#var uniqueNames = users.Select(u => u.Name).Distinct();
// TypeScriptconst uniqueNames = Object.keys( users.map(u => u.name).reduce( (un, u) => ({ ...un, n }), {} ));
ElementAt
// C#var nth = users.ElementAt(n);
// TypeScriptif (n < 0 || n > users.length) { throw new Error('Index was out of range');}const nth = users[n];
ElementAtOrDefault
// C#var nth = users.ElementAtOrDefault(n);
// TypeScriptconst nth = users[n];
Empty
// C#var noUsers = IEnumerable.Empty<User>();
// TypeScriptconst noUsers: User[] = [];const noUsers = [] as User[];
Except
// C#var maleUsers = users.Except(femaleUsers);
// TypeScriptconst maleUsers = users.filter(u => !femaleUsers.includes(u) // Use a polyfill for IE support);
First
// C#var first = users.First();
// TypeScriptif (users.length < 1) { throw new Error('Sequence contains no elements');}const first = users[0];
FirstOrDefault
// C#var first = users.FirstOrDefault();
// TypeScriptconst first = users[0];
List.ForEach
// C#users.ToList().ForEach(u => /* ... */);
// TypeScriptusers.forEach(u => /* ... */);
GroupBy
// C#var usersByCountry = users.GroupBy(u => u.Country);
// TypeScriptconst usersByCountry = users.reduce((ubc, u) => ({ ...ubc, [u.country]: [ ...(ubc[u.country] || []), u ],}), {});
Intersect
// C#var targetUsers = usersWhoClicked.Intersect(usersBetween25And45);
// TypeScriptconst targetUsers = usersWhoClicked.filter(u => usersBetween25And45.includes(u) // Use a polyfill for IE support);
Last
// C#var last = users.Last();
// TypeScriptif (users.length < 1) { throw new Error('Sequence contains no elements');}const last = users[users.length - 1];
LastOrDefault
// C#var last = users.LastOrDefault();
// TypeScriptconst last = users[users.length - 1];
Max
// C#var oldestAge = users.Max(u => u.Age);
// TypeScriptif (users.length < 1) { throw new Error('source contains no elements');}const oldestAge = users.reduce((oa, u) => Math.max(oa, u.age), 0);
Min
// C#var youngestAge = users.Min(u => u.Age);
// TypeScriptif (users.length < 1) { throw new Error('source contains no elements');}const youngestAge = users.reduce((ya, u) => Math.min(ya, u.age), Number.MAX_VALUE);
OfType
// C#var bots = users.OfType<Bot>();
// TypeScript// No equivalent
OrderBy / ThenBy
// C#var sorted = users.OrderBy(u => u.Age).ThenBy(u => u.Name);
// TypeScriptconst sorted = users.sort((a, b) => { const ageDiff = b.age - a.age; if (ageDiff) return ageDiff; return a.name.localeCompare(b.name); // Use a polyfill for IE support});
Reverse
// C#var backwards = users.Reverse();
// TypeScriptconst backwards = users.reverse();// Caution: users is also reversed!
Select
// C#var names = users.Select(u => u.Name);
// TypeScriptconst names = users.map(u => u.name);
SelectMany
// C#var phoneNumbers = users.SelectMany(u => u.PhoneNumbers);
// TypeScriptconst phoneNumbers = users.reduce((pn, u) => [ ...pn, ...u.phoneNumbers ], []);
Single
// C#var user = users.Single();
// TypeScriptif (users.length > 1) { throw new Error('The input sequence contains more than one element');}else if (!users.length) { throw new Error('The input sequence is empty');}const user = users[0];
SingleOrDefault
// C#var user = users.Single();
// TypeScriptconst user = users[0];
Skip
// C#var otherUsers = users.Skip(n);
// TypeScriptconst otherUsers = users.filter((u, i) => i >= n);
SkipWhile
// C#var otherUsers = users.SkipWhile(predicate);
// TypeScriptlet i = 0;while (i < users.length && predicate(users[i++]));const otherUsers = users.slice(i - 1);
Sum
// C#var totalYears = users.Sum(u => u.Age);
// TypeScriptif (users.length < 1) { throw new Error('source contains no elements');}const totalYears = users.reduce((ty, u) => ty + u, 0);
Take
// C#var otherUsers = users.Take(n);
// TypeScriptconst otherUsers = users.filter((u, i) => i < n);
TakeWhile
// C#var otherUsers = users.TakeWhile(predicate);
// TypeScriptlet i = 0;while (i < users.length && predicate(users[i++]));const otherUsers = users.slice(0, i - 1);
Union
// C#var allUsers = someUser.Union(otherUsers);
// TypeScriptconst allUsers = otherUsers.reduce((au, u) => au.includes(u) // Use a polyfill for IE support ? au : [ ...au, u ]}), someUsers));
Where
// C#var adults = users.Where(u => u.Age >= 18);
// TypeScriptconst adults = users.filter(u => u.age >= 18);
Zip
// C#var matches = buyers.Zip(sellers, (b, s) => new { Buyer = b, Seller = s });
// TypeScriptconst matches = [];for (let i = 0; i < buyers.length && i < sellers.length; i++) { matches.push({ buyer: buyers[i], seller: sellers[i], });}
Regex Cheat Sheet – javascript
Wrapping a Tag – WebStorm IDE
Select text.
Ctrl+alt+j – surround with tag.
Source: Wrapping a Tag. Example of Applying Surround Live Templates – Help | PhpStorm
The Testing Introduction I Wish I Had
Robo 3T – formerly Robomongo — native MongoDB management tool (Admin UI)
Robo 3T Robo 3T (formerly Robomongo) is the free lightweight GUI for MongoDB enthusiasts. MongoDB GUI with embedded shell
Source: Robo 3T – formerly Robomongo — native MongoDB management tool (Admin UI)
Angular + Redux — The lesson we’ve learned for you
Gotchas from using Angular with Redux:
The Ultimate Guide to Asynchronous Programming in C# and ASP.NET – Exception Not Found
Helix Merge and Diff Tools (P4Merge) | Perforce
Free 3-way merge tool
Deploy an Angular Application to IIS – Angular In Depth
Getting your Angular Router application actually working in a non-root folder on Internet Information Services
The Angular Router is a fantastic module for Single Page Apps. However, to deploy it in a Production scenario you will typically need to do some configuration to make it work. This article details the steps necessary to deploy an Angular Router application anywhere on Internet Information Services (IIS).
Source: Deploy an Angular Application to IIS – Angular In Depth