- Abbot - The product my company is building and subject of the talk.
- A Serious Business, Inc. - My company.
- Age and High-Growth Entrepreneurship - Contains the graph of the probability of successful exit by age.
- Hubot - our old friend and inspiration for Abbot.
- Chat-Ops - the way of working together in Chat with a bot.
- YCombinator - The Startup Incubator we joined.
- ASP.NET Core - A big part of our tech stack
- PROJECT MANAGEMENT - A TREE SWING STORY - source of the tree-swing cartoon which originally started in the 70s
- [Making sense of MVP](https://blog.crisp.se/2016/01/25/henrikkn
View serious-startup-resources.md
View stripe-mrr.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This is the source for the blog post here: https://haacked.com/archive/2022/10/12/calculating-mrr-with-stripe-and-csharp/ | |
using System.Collections.Generic; | |
using System.Diagnostics; | |
using System.Linq; | |
using System.Threading.Tasks; | |
namespace Stripe; | |
public static class StripeExtensions |
View upcast-example.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Suppose we have the two record types | |
public record Person(int Id) : PersonUpdate() | |
{ | |
}; | |
public record PersonUpdate() | |
{ | |
public string Name {get; init;} | |
//... bunch of other properties. |
View never-not.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface IArgument | |
{ | |
/// <summary> | |
/// The value of the argument sans quotes. | |
/// </summary> | |
string Value { get; } | |
} | |
public interface IArguments : IReadOnlyList<IArgument>, IArgument | |
{ |
View ForbiddenTypeAnalyzer.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Collections.Immutable; | |
using System.Linq; | |
using Microsoft.CodeAnalysis; | |
using Microsoft.CodeAnalysis.Diagnostics; | |
using Microsoft.CodeAnalysis.Operations; | |
// CREDIT: https://github.com/dotnet/roslyn-analyzers/blob/master/src/Microsoft.CodeAnalysis.BannedApiAnalyzers/Core/SymbolIsBannedAnalyzer.cs | |
[DiagnosticAnalyzer(LanguageNames.CSharp)] |
View jsonconvert-bug.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[Fact] | |
public void StackTest() | |
{ | |
var stack = new Stack<string>(); | |
stack.Push("one"); | |
stack.Push("two"); | |
stack.Push("three"); | |
var serialized = JsonConvert.SerializeObject(stack, new JsonSerializerSettings | |
{ |
View LayoutForPartialTagHelperExample.md
What I'm looking for is a nicer more declarative approach to Templated Razor Delegates
In Any old Razor Page or View - SomePage.cshtml
...
<div>
<partial name="Shared/_PartialLayout" for="SomeModel">
<strong>Content</strong> that will be injected into the layout, which
will get rendered here.
View RoleProfileService.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
This needs to be registered with the IdentityServer in the Startup.cs | |
by calling AddProfileService<RoleProfileService>() on the builder returned | |
by AddIdentityServer. | |
ex... | |
var builder = services.AddIdentityServer(options => | |
{ | |
options.Events.RaiseErrorEvents = true; |
View ModelBuilderExtensions.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Copyright Phil Haack | |
Licensed under the MIT license - https://github.com/haacked/CodeHaacks/blob/main/LICENSE. | |
*/ | |
using System; | |
using System.Linq; | |
using System.Linq.Expressions; | |
using System.Reflection; | |
using Microsoft.EntityFrameworkCore; | |
using Microsoft.EntityFrameworkCore.Metadata.Builders; |
View index.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = (app) => { | |
// Respond to new issue comments | |
app.on('issue_comment.created', async context => { | |
const message = context.payload.comment.body | |
// The following does a rough approximation of | |
// trying to find a question that proposes two | |
// alternatives. It's not very smart about it, | |
// but good enough for our case. | |
const dichotomy = message.toLowerCase() |
NewerOlder