Skip to content

Instantly share code, notes, and snippets.

View makomweb's full-sized avatar
🌀

Martin Komischke makomweb

🌀
View GitHub Profile
@makomweb
makomweb / wunderlist_login_with_cpp.cpp
Last active December 23, 2015 22:59
Perform a login to Wunderlist's Wunder API using pure C++, parallel patterns library, boost 1.54 and Casablanca C++ REST library
#include <cpprest/json.h>
#include <sstream>
#include <cpprest/http_client.h>
#include <cpprest/filestream.h>
#include <iostream>
#include <map>
using namespace std;
using namespace web::http;
using namespace web::http::client;
@makomweb
makomweb / deserialize_with_annotations.cs
Last active December 28, 2015 07:39
Deserializing an old scheme with polymorphic types into a new one using .NET facilities. The basic problem is that the XML bears the xsi information inside the Person element which enables the deserializer to create concrete types. This way you can make the deserializer happy about even though you don't need the specific information from the con…
[TestFixture]
public class Deserialize_a_different_scheme
{
[XmlType("Archive")]
public class Archive
{
[XmlType("Person")]
[XmlInclude(typeof(Employee))]
public class Person
{
@makomweb
makomweb / overloaded_ctor_in_ioc_container.cs
Last active December 28, 2015 21:19
In case you have multiple constructors and you still want to take benefit of IoC you should not step into the trap of annotating your preferred constructor, because this makes your library code depend on a specific container implementation. Instead you should search for an alternative approach. Here it is: e.g. Unity's InjectionFactory.
public class FeatureService
{
public FeatureService(string accessToken)
{
// .. ommited internals
}
[InjectionConstructor] // <-- This annotation makes you depend on the IoC container's implementation!
public FeatureService(IFeatureDependency dependency)
{
@makomweb
makomweb / send_message_to_ws_server_and_receive_reply.cs
Last active December 30, 2015 05:59
Send a message to the WS server and receive a reply.
[Fact]
public async Task Getting_an_event_when_connecting_should_succeed()
{
using (var ws = new ReactiveWebSocket("ws://127.0.0.1:8080", true))
{
var man = new WebSocketManager(ws);
man.Send(new Message { Id = Guid.NewGuid().ToString() });
@makomweb
makomweb / datadriven_test_with_xUnit.net.cs
Last active December 31, 2015 03:29
Testing different serializers with xUnit.net.
public class SerializerTests
{
public static IEnumerable<object[]> Serializers
{
get
{
yield return new object[] { new NewtonsoftJson() };
yield return new object[] { new ServiceStackJson() };
}
}
@makomweb
makomweb / create_changelog.js
Last active December 31, 2015 15:09
Write all the GIT commit messages since the last tag (on the current branch) into a changelog file.
var usage_description = "Usage: node create_changelog.js MyChangelog.txt \"Changelog for nightly build version 0.9.0.1\"";
var args = ParseArguments();
var spawn = require('child_process').spawn;
var fs = require('fs');
var prc = spawn('git', ['describe', '--tags', '--abbrev=0']);
prc.stdout.setEncoding('utf8');
prc.stdout.on('data', function (data) {
var str = data.toString();
var lines = str.split(/(\r?\n)/g);
public class LoginExplorations
{
public async Task<DataContracts.List[]> FetchListsAsync(string accessToken, string deviceId)
{
var info = new TestSystemInfo(
userAgent: "Wunderlist.Sdk/" + new AssemblyInfoHelper(typeof (RestClient)).AssemblyVersion,
clientId: "01d4f9dcdafd531da497",
clientProductGitHash: new AssemblyInfoHelper(typeof (RestClient)).InformationalVersion,
clientDeviceId: deviceId,
clientSystem: "Windows RT device",
@makomweb
makomweb / observable_null_vs_empty.cs
Created April 8, 2016 17:00
Observable null vs. empty
public class MyTests
{
public class Package { }
public class Service
{
public IObservable<Package> DeliverRegular()
{
return DeliverRegularAsync().ToObservable();
}
@makomweb
makomweb / awaiting_null_should_throw.cs
Created July 14, 2017 08:31
When awaiting null it should throw
[Fact]
public async Task When_awaiting_null_it_should_throw()
{
try
{
Task t1 = Task.Run(() => { /* do nothing */ });
Task t2 = null;
await Task.WhenAll(t1, t2);
Assert.True(false, "Should have thrown before!");
}
@makomweb
makomweb / events_in_cpp.cpp
Last active August 2, 2017 08:03
Playing around with C++ events. Very similar to Qt's signal/slot mechanism.
#include <iostream>
#include <stdio.h>
using namespace std;
[event_source(native)]
class Sender
{
public:
__event void SendEvent(int value);