Skip to content

Instantly share code, notes, and snippets.

public class HashedUrl
{
private readonly string _secretKey;
private readonly string _urlToHash;
private readonly DateTime _startDate;
private readonly DateTime _endDate;
/// <summary>
/// Hash a url
/// </summary>
@cairey
cairey / MouseEnterIntent.cs
Created August 26, 2011 10:56
Just like Hover Intent in JQuery, this is Hover Intent Behavior for Silverlight. See "Read Me" below.
public class MouseEnterIntent
{
public static readonly DependencyProperty CommandProperty =
DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(MouseEnterIntent), new PropertyMetadata(OnSetCommandCallback));
public static readonly DependencyProperty CommandParameterProperty =
DependencyProperty.RegisterAttached("CommandParameter", typeof(object), typeof(MouseEnterIntent), new PropertyMetadata(OnSetCommandParameterCallback));
public static readonly DependencyProperty MouseEnterIntentCommandBehaviorProperty =
DependencyProperty.RegisterAttached("HoverIntentCommandBehavior", typeof(MouseEnterIntentCommandBehavior), typeof(MouseEnterIntent), null);
@cairey
cairey / CommandHandlerFactory.cs
Created July 20, 2012 15:13
Command pattern using MEF
[Export(typeof(ICommandHandlerFactory))]
public class CommandHandlerFactory : ICommandHandlerFactory
{
private readonly IEnumerable<ICommandHandler> _commandHandlers;
[ImportingConstructor]
public CommandHandlerFactory([ImportMany]IEnumerable<ICommandHandler> commandHandlers)
{
_commandHandlers = commandHandlers;
}
@cairey
cairey / DragOverControlToCommandBehavior.cs
Created July 20, 2012 15:07
Drag over control to command bahvior
public class DragOverControlToCommandBehavior : CommandBehaviorBase<Control>
{
public DragOverControlToCommandBehavior(Control element)
: base(element)
{
element.AllowDrop = true;
element.DragOver += ElementDragOver;
}
private void ElementDragOver(object sender, DragEventArgs e)
@cairey
cairey / LogInterceptor.cs
Created July 20, 2012 15:22
Aspect Oriented Programming with MEF using the interceptors. Compose an interceptor catalog in the example below
public class LogInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
if(invocation.TargetType.GetCustomAttributes(typeof(LogMethodCallsAttribute), true).Length > 0)
{
var loggerFacade = MefInstanceProvider.Container.GetExportedValue<ILoggerFacade>();
loggerFacade.Log(FormatMethodCall(invocation, ApplicationStates.Started), Category.Info, Priority.Low);
invocation.Proceed();
@cairey
cairey / Literal.cs
Created October 19, 2012 09:05
Literal of an expression at runtime. Handy for property change notifications i.e Literal.Of(() => MyProperty)
public static class Literal
{
private static string GetMemberName(Expression expression)
{
switch (expression.NodeType)
{
case ExpressionType.MemberAccess:
var memberExpression = (MemberExpression)expression;
var supername = GetMemberName(memberExpression.Expression);
@cairey
cairey / UnitOfWorkBehaviorAttribute.cs
Created October 19, 2012 09:12
WCF Unit of work Behavior
public class UnitOfWorkBehaviorAttribute : Attribute, IContractBehavior, IContractBehaviorAttribute
{
public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)
{ }
public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
{
foreach(var operation in dispatchRuntime.EndpointDispatcher.DispatchRuntime.Operations)
{
operation.CallContextInitializers.Add(new PCMUnitOfWorkCallContextInitializer());
@cairey
cairey / gist:3917111
Created October 19, 2012 09:14
MSTestContrib BDD Extensions
namespace MSTestContrib.Specifications
{
public static class BDDExtensions
{
public static ThenGrammar Then(this WhenGrammar whenGrammar, string description, Action<SpecificationContext> implementation)
{
Func<SpecificationContext, bool> implementationWithReturnTrue = (x) =>
{
implementation(x);
return true;
@cairey
cairey / offset_from_timecode.rb
Created February 7, 2016 10:59
Grab an offset in seconds from a UTC timecode on a Unified Streaming Server. Takes it to account encoder reconnects / restarts. This is the Ruby version.
def offset_from_timecode (nokogiri_doc, start_pos_utc, in_point_utc)
video_el = nokogiri_doc.search('video').first
c_els = video_el.css('c')
final_c_els = []
total_seconds = 0
start_pos_time = Time.parse(start_pos_utc.to_s)
c_els.each do |c_el|
end_of_c_utc = DateTime.parse(c_el['end'])
final_c_els << c_el if end_of_c_utc > in_point_utc
@cairey
cairey / OffsetFromTimecode.cs
Created February 7, 2016 10:59
Grab an offset in seconds from a UTC timecode on a Unified Streaming Server. Takes it to account encoder reconnects / restarts. This is the C# version.
public double GetOffsetFromTimecode(Guid eventId, DateTime startPos, DateTime inPoint)
{
startPos = startPos.ToUniversalTime();
inPoint = inPoint.ToUniversalTime();
var ismUrl = _configuration.GenerateIsmStreamUrl(eventId);
var streamUrl = ismUrl + "/archive";
var doc = XDocument.Load(streamUrl);
var videoEl = doc.Descendants().First(x => x.Name.LocalName == "video");