Skip to content

Instantly share code, notes, and snippets.

View g0t4's full-sized avatar
🏁

Wes Higbee g0t4

🏁
View GitHub Profile
@g0t4
g0t4 / gist:8718256
Last active August 29, 2015 13:55
Razor allow custom html builders to use @ syntax and not encode the output
// Out of the box, WebViewPage essentially does this to write content:
Output.Write(HttpUtility.HtmlEncode(content));
// And HttpUtility.HtmlEncode will encode anything not marked with the IHtmlString interface
// If we have a custom html builder we have to use something like this:
@Html.Raw(safeBuilder)
// This is a lot of extra typing
@g0t4
g0t4 / hackNancyRazorPageBaseType
Last active August 29, 2015 13:55
Hack to set a custom base view with Nancy and Razor
// At this time Nancy's Razor view engine doesn't let you set a default base class like ASP.NET web pages does with pageBaseType, if you want to hack one in here is how:
// First create your custom type, this one writes out hack for everything, so obviously remove that unless you want that :)
public abstract class MyRazorPage<T> : NancyRazorViewBase<T>
{
public override void Write(object value)
{
base.WriteLiteral("hack");
}
@g0t4
g0t4 / gist:30a5d7f5a07146d6bad3
Created October 15, 2014 22:21
Null safety, proving something is null in kotlin and then not needing to deal with it thereafter
// In Kotlin, I can force the source of a reference to ensure it's not null, that way every thing thereafter doesn't have to deal with null references
// This is what I refer to as fixing things up stream, of course when appropriate.
// Typically sources of references don't both to check for null and even if they do, they can't make explicit that they've taken care of that check. So every consumer of that reference theoretically may need to check.
// In this example, there's no reason the userId, password and serverUrl should ever be null. Unfortunately because of interop with java, that's not a contractual guarantee.
// So at the point that I produce these values for my own use, I perfom the check in one place, stop everything if my assumption is not valid, and otherwise be on my merry way never to worry about null references after this point
abstract class Restore(val runner: BuildRunnerContext) {
val logger: SimpleBuildLogger = runner.getBuild().getBuildLogger()
val client: TeamCityClient
{
@g0t4
g0t4 / tap.kt
Created October 15, 2014 23:39
A ruby like tap method for kotlin, except for any type
/**
* Provide a means to fluently tap into a chain of method calls so as not to need to declare unnecessary variables
* */
public fun <T : Any, R> T.tap(tap: (T) -> R): T {
tap(this)
return this
}
// here's an example where I'm in a fluent builder and I'd like to log the URI of the request without introducing a variable
val response = this.builds.queryParam("locator", "buildType:{buildTypeId},count:1,personal:false,canceled:false")
@g0t4
g0t4 / ArgumentBuilder.kt
Created October 24, 2014 15:52
Demonstrating one off extension functions in Kotlin for improving readability
public class ArgumentBuilder(private val runnerParameters: Map<String, String>) {
public fun build(): List<String> {
return arrayListOf<String>()
.addIfSet("--Project", RunnerSettings.PROJECT_FILE)
.addIfSet("--Output", RunnerSettings.OUTPUT)
.addFlagIfSet("--Flag1", RunnerSettings.FLAG_1)
.addFlagIfSet("--Flag2", RunnerSettings.FLAG_2)
.addFlagIfSet("--Flag3", RunnerSettings.FLAG_3)
.addMultipleIfSet("--InputFiles", RunnerSettings.INPUTS)
@g0t4
g0t4 / gist:a97bcc64dff4ac9394ef
Created November 5, 2014 18:08
Building an QueryAnalysis instances that contain the results of compiling and executing the query, then using this to find rules and rule violations
private QueryAnalysis[] GetQueriesToAnalyze()
{
var queries = _Project.GetRulesInProjectFileAndInRuleFilesAndDeclaredInSourceCode(_Analysis.RulesExtractedFromCode).RootParent;
var activeQueries = queries.GetActiveQueries();
var compiledQueriesByQueryString = GetCompiledQueriesByQueryString(activeQueries);
var justMyCode = queries.ComputeJustMyCode(_Analysis.CodeBase);
return activeQueries
.Select(query => new QueryAnalysis(query, compiledQueriesByQueryString[query.QueryString], justMyCode, _Project))
.ToArray();
@g0t4
g0t4 / System.tap.js
Last active April 2, 2021 03:04
SystemJS / jspm course components that might need updates
var normalize = System.normalize;
System.normalize = function (name, parentName, parentAddress) {
console.log("normalize: " + JSON.stringify({
name: name,
parentName: parentName,
parentAddress: parentAddress
}));
return normalize.call(this, name, parentName, parentAddress);
};
@g0t4
g0t4 / docker-compose.yml
Created May 18, 2016 18:10
TeamCity Docker Compose setup
version: '2'
services:
teamcity:
image: sjoerdmulder/teamcity
ports:
- 8111:8111
teamcity-agent:
image: sjoerdmulder/teamcity-agent
environment:
@g0t4
g0t4 / glossary.md
Last active June 7, 2021 16:49
Consul and related terms
  • Node - a physical or virtual machine that hosts services
    • Nodes also referred to as members.
    • Examples
      • Your computer
      • An AWS EC2 instance
      • A bare metal machine in your private data center
  • Service - executing software that provides utility via an interface
    • Typically long-lived process listening on a port(s)
    • Examples
  • A web server (nginx, apache, iis)