<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sepier</title>
	<atom:link href="http://www.sepier.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sepier.com</link>
	<description></description>
	<lastBuildDate>Fri, 19 Apr 2013 18:46:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Chrome Extension: TypeScript Console</title>
		<link>http://www.sepier.com/blog/chrome-extension-typescript-console/</link>
		<comments>http://www.sepier.com/blog/chrome-extension-typescript-console/#comments</comments>
		<pubDate>Wed, 17 Apr 2013 03:40:57 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[typescript]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=834</guid>
		<description><![CDATA[<p>I code in TypeScript daily but there was something missing from my workflow. I was developing applications  in TypeScript but I was debugging them in JavaScript. Since my go to browser-of-choice is Chrome, I decided to rectify this issue. TypeScript Console is a bare-bones Chrome extension that allows one to execute TypeScript to the console.&#160; &#160;<a href="http://www.sepier.com/blog/chrome-extension-typescript-console/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/chrome-extension-typescript-console/">Chrome Extension: TypeScript Console</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>I code in TypeScript daily but there was something missing from my workflow. I was developing applications  in <a href="http://www.sepier.com/bits/typescript_logo.png"><img class="alignright size-full wp-image-745" alt="typescript_logo" src="http://www.sepier.com/bits/typescript_logo.png" width="262" height="109" /></a>TypeScript but I was debugging them in JavaScript. Since my go to browser-of-choice is Chrome, I decided to rectify this issue.</p>
<p>TypeScript Console is a bare-bones Chrome extension that allows one to execute TypeScript to the console.  It is split into two Ace editors &#8212; TypeScript on the right, JavaScript on the left. Typing into the TypeScript editor automatically interrupts it to JavaScript. Hitting &#8216;CTRL+Enter&#8217; executes the code.</p>
<p>As usual &#8212; the code and the extension itself are on my <a href="https://github.com/choudeshell/TypeScript-Console">GitHub</a>. Once I add a few more features (history, smart indent) I&#8217;ll be adding it to the Chrome Store.</p>
<p style="text-align: center;"><a href="http://www.sepier.com/bits/typescript.png"><img class="size-full wp-image-835 aligncenter" alt="typescript" src="http://www.sepier.com/bits/typescript.png" width="1038" height="494" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The post <a href="http://www.sepier.com/blog/chrome-extension-typescript-console/">Chrome Extension: TypeScript Console</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/chrome-extension-typescript-console/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Download All Comixology Digital First Issue Comics: JavaScript Fun</title>
		<link>http://www.sepier.com/blog/download-all-comixology-digital-first-issue-comics-javascript-fun/</link>
		<comments>http://www.sepier.com/blog/download-all-comixology-digital-first-issue-comics-javascript-fun/#comments</comments>
		<pubDate>Fri, 12 Apr 2013 03:29:05 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[comics]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=823</guid>
		<description><![CDATA[<p>When Marvel originally tried to give away 700+ plus comics &#8212; their servers crashed. If you were lucky enough to re-signup once Marvel got everything sorted out, invites/instructions are now going out on how to download your free digital comics. &#160; One small problem. Downloading them all is painful&#8230;really painful with all the clicking of the &#8216;Add&#160; &#160;<a href="http://www.sepier.com/blog/download-all-comixology-digital-first-issue-comics-javascript-fun/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/download-all-comixology-digital-first-issue-comics-javascript-fun/">Download All Comixology Digital First Issue Comics: JavaScript Fun</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.engadget.com/2013/04/08/marvel-700-comics-free-round-two/">When Marvel originally tried to give away 700+ plus comics &#8212; their servers crashed.</a> If you were lucky enough to re-signup once Marvel got everything sorted out, invites/instructions are now going out on how to download your free digital comics.</p>
<p><a href="http://www.sepier.com/bits/Image-1.png"><img class="wp-image-824 aligncenter" alt="Image 1" src="http://www.sepier.com/bits/Image-1.png" width="640" height="295" /></a></p>
<p>&nbsp;</p>
<p>One small problem. Downloading them all is painful&#8230;really painful with all the clicking of the &#8216;Add Comic&#8217; and &#8216;Next&#8217; buttons. Don&#8217;t fret &#8212; there is an easier way. Just open a JavaScript console in your browser and run the following.</p><pre class="crayon-plain-tag">// Loop through all the pages (Next)
for (var page = 1; page &lt; 20; page++) {
	//Trigger the click event on the 'Add Comic' button
    jQuery.each($('.addComicLink'), function (i, val) {
        if ($(val).text() == "Add Comic") {
            $(val).click();
        }
    });
    // Goto the next page of all sections
    for (var sec = 1; sec &lt; 20; sec++) {
        GoToNextAdHocPage(sec);
    }
}</pre><p></p>
<p style="text-align: center;"><a href="http://www.sepier.com/bits/Image-41.png"><img class="wp-image-830 aligncenter" alt="Comics (Windows 8)" src="http://www.sepier.com/bits/Image-41.png" width="580" height="377" /></a></p>
<p>The post <a href="http://www.sepier.com/blog/download-all-comixology-digital-first-issue-comics-javascript-fun/">Download All Comixology Digital First Issue Comics: JavaScript Fun</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/download-all-comixology-digital-first-issue-comics-javascript-fun/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Extending Katana for fun and profit</title>
		<link>http://www.sepier.com/blog/extending-katana-for-fun-and-profit/</link>
		<comments>http://www.sepier.com/blog/extending-katana-for-fun-and-profit/#comments</comments>
		<pubDate>Sat, 16 Mar 2013 07:03:14 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[katana]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[owin]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=790</guid>
		<description><![CDATA[<p>The Katana Project is a server implementation of the Open Web Interface for .NET (OWIN) specification. In simple terms: It is a web server that implements an agreed upon standard for communication between the host (server), middleware  and your application . For my current project, I needed a way for Katana to serve files directly from&#160; &#160;<a href="http://www.sepier.com/blog/extending-katana-for-fun-and-profit/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/extending-katana-for-fun-and-profit/">Extending Katana for fun and profit</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<blockquote>
<p style="text-align: left;">The <a title="Katana" href="http://katanaproject.codeplex.com/">Katana Project</a> is a server implementation of the <a title="OWIN" href="http://owin.org/">Open Web Interface for .NET (OWIN)</a> specification. In<a href="http://www.sepier.com/bits/Image-4.png"><img class="size-full wp-image-807 alignright" alt="Image 4" src="http://www.sepier.com/bits/Image-4.png" width="205" height="62" /></a> simple terms: It is a web server that implements an agreed upon standard for communication between the host (server), middleware  and your application .</p>
</blockquote>
<p>For my current project, I needed a way for Katana to serve files directly from an assembly via embedded resources. Since Katana was designed to be very extensible &#8211; it is trivial to add the functionality that I needed. Katana provides a <a href="http://katanaproject.codeplex.com/SourceControl/changeset/view/85db6533ceca#src/Microsoft.Owin.StaticFiles/StaticFileMiddleware.cs">StaticFile middleware</a> out of the box, so by injecting a custom FileSystemProvider we can serve files directly from an assembly.</p>
<p>We&#8217;ll start out by telling the StaticFile middleware to use our custom ResourceFileSystemProvider.</p><pre class="crayon-plain-tag">app.UseStaticFiles(options =&gt;
{
    options.WithFileSystem(new ResourceFileSystemProvider());
});</pre><p>For the actual ResourceFileSystemProvider &#8211; we need to implement IFileSystem. IFileSystem is an interface of just two methods, one to get information about a directory and the other to get information about a specific file. Both of these methods return a bool with an out parameter of type IFileInfo.</p><pre class="crayon-plain-tag">using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.Owin.FileSystems;

namespace Metrical.Providers
{
    public class ResourceFileSystemProvider : IFileSystem
    {
        public bool TryGetDirectoryContents(string subpath, out IEnumerable&lt;IFileInfo&gt; contents)
        {
            throw new NotImplementedException();
        }

        public bool TryGetFileInfo(string subpath, out IFileInfo fileInfo)
        {
            var flatPath = subpath.Replace('/', '.');
            var assembly = Assembly.GetExecutingAssembly();
            var assemblyName = assembly.GetName().Name;
            var path = String.Format("{0}{1}", assemblyName, flatPath);
            var resourceNames = assembly.GetManifestResourceNames();
            if (resourceNames.Contains(path))
            {
                fileInfo = new ResourceFileInfo(path);
                return true;
            }

            fileInfo = null;
            return false;
        }
    }
}</pre><p>IFileInfo encapsulates information about a file (or directory). It also exposes a stream of the file contents. As you can see we just pass in a reference to the currently executing assembly and return the ManifestResourceStream.</p><pre class="crayon-plain-tag">using Microsoft.Owin.FileSystems;
using System;
using System.Reflection;

namespace Metrical.Providers
{
    public class ResourceFileInfo : IFileInfo
    {
        private string _filePath;
        private Assembly _assembly;

        public ResourceFileInfo(string file)
        {
            _filePath = file;
            _assembly = Assembly.GetExecutingAssembly();
        }

        public System.IO.Stream CreateReadStream()
        {
            return _assembly.GetManifestResourceStream(_filePath);
        }

        public bool IsDirectory
        {
            get
            {
                return false;
            }
        }

        public DateTime LastModified
        {
            get
            {
                return DateTime.Now;
            }
        }

        public long Length
        {
            get
            {
                using (var stream = CreateReadStream())
                {
                    return stream.Length;
                }
            }
        }

        public string Name
        {
            get
            {
                return _filePath;
            }
        }

        public string PhysicalPath
        {
            get
            {
                return _filePath;
            }
        }
    }
}</pre><p></p>
<p>The post <a href="http://www.sepier.com/blog/extending-katana-for-fun-and-profit/">Extending Katana for fun and profit</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/extending-katana-for-fun-and-profit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom Kendo Grid Template</title>
		<link>http://www.sepier.com/blog/custom-kendo-grid-template/</link>
		<comments>http://www.sepier.com/blog/custom-kendo-grid-template/#comments</comments>
		<pubDate>Tue, 15 Jan 2013 21:48:53 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[kendo]]></category>
		<category><![CDATA[telerik]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=771</guid>
		<description><![CDATA[<p>Adding a custom template to a Kendo grid can be painful at times. Like most JavaScript controls and widgets, debug traces aren&#8217;t plentiful. A simple way to add the custom template is to move it out to it&#8217;s own JavaScript function. Not only does this help readability, if there is an exception, it will be&#160; &#160;<a href="http://www.sepier.com/blog/custom-kendo-grid-template/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/custom-kendo-grid-template/">Custom Kendo Grid Template</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sepier.com/bits/kendo-logo.png"><img class="alignright size-full wp-image-772" alt="kendo-logo" src="http://www.sepier.com/bits/kendo-logo.png" width="230" height="80" /></a>Adding a custom template to a Kendo grid can be painful at times. Like most JavaScript controls and widgets, debug traces aren&#8217;t plentiful.</p>
<p>A simple way to add the custom template is to move it out to it&#8217;s own JavaScript function. Not only does this help readability, if there is an exception, it will be easier to debug.</p>
<p>To do so, move your template out to a separate JavaScript function,</p><pre class="crayon-plain-tag">&lt;script&gt;
function exceptionTemplate(value) {
 if (value == &quot;Flex&quot;)
   return &quot;Flex&quot;;
 return &quot;Service&quot;;
}
&lt;/script&gt;</pre><p>and then call it from within your Grid definition:</p><pre class="crayon-plain-tag">$(document).ready(function() {
        kendo.culture(&quot;en-US&quot;);
        $(&quot;#grid&quot;).kendoGrid({
            dataSource: {
                type: &quot;odata&quot;,
                transport: {
                    read: &quot;OData/Entities.svc/ErrorEvents&quot;
                },
                schema: {
                    model: {
                        fields: {
                            Timestamp: { type: &quot;datetime&quot; }
                        }
                    }
                },
            },
            columns: [ {
                    field: &quot;Exception&quot;,
                    title: &quot;Type&quot;,
                    template: '#= exceptionTemplate(Exception) #',
                    width:150
                }
            ]
        });
    });</pre><p></p>
<p>The post <a href="http://www.sepier.com/blog/custom-kendo-grid-template/">Custom Kendo Grid Template</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/custom-kendo-grid-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP Geo-Location: Splunk &amp; Google Maps</title>
		<link>http://www.sepier.com/blog/data-visualized-splunk-google-maps/</link>
		<comments>http://www.sepier.com/blog/data-visualized-splunk-google-maps/#comments</comments>
		<pubDate>Tue, 15 Jan 2013 21:26:05 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[splunk]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=759</guid>
		<description><![CDATA[<p>I love data. I love data visualizations more. As I throw more and more metrics, logs and data at Splunk, I need better ways of consuming this data and making it work for me. One of the ways to visualize IP addresses is through their physical location.  A lot of web sites provide IP to geo-location tools,&#160; &#160;<a href="http://www.sepier.com/blog/data-visualized-splunk-google-maps/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/data-visualized-splunk-google-maps/">IP Geo-Location: Splunk &#038; Google Maps</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sepier.com/bits/splunk.png"><img class="wp-image-760 alignright" alt="Splunk Google Maps results" src="http://www.sepier.com/bits/splunk.png" width="521" height="333" /></a></p>
<p>I love data. I love data visualizations more. As I throw more and more metrics, logs and data at Splunk, I need better ways of consuming this data and making it work for me.</p>
<p>One of the ways to visualize IP addresses is through their physical location.  A lot of web sites provide IP to geo-location tools, like <a href="http://www.ip-address.org/tracer/ip-whois.php">IP-Address.org</a>.</p>
<p>Although these physical locations are not perfect (a user may use NAT or a VPN) they give us a general location that can aid in answering some questions. Questions like:</p>
<ul>
<li>When is the &#8216;best&#8217; time for schedule maintenance based on my users time zones?</li>
<li>What is the average latency of my users in the UK?</li>
<li>How many visitors do I have from China?</li>
</ul>
<p>If you are storing your logs in Splunk, generating the geo-location information and plotting them on Google Maps couldn&#8217;t be easier. <a href="http://www.spp.at/">SPP</a> has created a <a href="http://splunk-base.splunk.com/apps/22365/google-maps">community Splunk application</a> to handle all the hard work. To use it, it is as simple as installing the application, navigating to it in Splunk and piping in data.</p>
<p>The Google Maps application adds a new command &#8216;geoip&#8217;.  A simple query,</p><pre class="crayon-plain-tag">sourcetype=&quot;iis&quot; | dedup dest_ip | geoip dest_ip</pre><p>will generate the geo-location fields and if you are within the Google Maps Splunk application, it will also plot them on the map.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The post <a href="http://www.sepier.com/blog/data-visualized-splunk-google-maps/">IP Geo-Location: Splunk &#038; Google Maps</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/data-visualized-splunk-google-maps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TypeScript &amp; Source Maps</title>
		<link>http://www.sepier.com/blog/typescript-source-maps/</link>
		<comments>http://www.sepier.com/blog/typescript-source-maps/#comments</comments>
		<pubDate>Wed, 02 Jan 2013 03:20:39 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[typescript]]></category>
		<category><![CDATA[web essentials]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=716</guid>
		<description><![CDATA[<p>One of Microsoft&#8217;s biggest open source contributions in 2012 was TypeScript. TypeScript is a language for application-scale JavaScript development. TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. In other terms, TypeScript is a source-to-source compiler with it&#8217;s output being proper JavaScript. An example application in TypeScript [1] would compile to [2] in JavaScript. [crayon-51988085437c3/] [crayon-5198808543820/] &#160; As&#160; &#160;<a href="http://www.sepier.com/blog/typescript-source-maps/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/typescript-source-maps/">TypeScript &#038; Source Maps</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.sepier.com/bits/typescript_logo.png"><img class="alignleft size-full wp-image-745" alt="typescript_logo" src="http://www.sepier.com/bits/typescript_logo.png" width="262" height="109" /></a>One of Microsoft&#8217;s biggest open source contributions in 2012 was <a title="TypeScript" href="http://www.typescriptlang.org/">TypeScript</a>.</p>
<blockquote><p>TypeScript is a language for application-scale JavaScript development. TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.</p></blockquote>
<p>In other terms, TypeScript is a source-to-source compiler with it&#8217;s output being proper JavaScript.</p>
<p>An example application in TypeScript [1] would compile to [2] in JavaScript.</p><pre class="crayon-plain-tag">function Greeter(greeting) {
this.greeting = greeting;
}

Greeter.prototype.greet = function() {
return &quot;Hello, &quot; + this.greeting;
}

var greeter = new Greeter({message: &quot;world&quot;});

var button = document.createElement('button')
button.innerText = &quot;Say Hello&quot;
button.onclick = function() {
alert(greeter.greet())
}

document.body.appendChild(button)</pre><p></p><pre class="crayon-plain-tag">var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return &quot;Hello, &quot; + this.greeting;
    };
    return Greeter;
})();
var greeter = new Greeter(&quot;world&quot;);
var button = document.createElement('button');
button.innerText = &quot;Say Hello&quot;;
button.onclick = function () {
    alert(greeter.greet());
};
document.body.appendChild(button);</pre><p>&nbsp;</p>
<p>As you can tell, the code between TypeScript and JavaScript, although look similar, are different. Even statements are on different lines. Although this example is small, with &#8220;application-scale&#8221; TypeScript the difference between the original code and JavaScript can be immense.</p>
<p>Since JavaScript is the code that actually runs in the browser, trying to manually decipher which variable or line goes with the original TypeScript, when actively debugging in a browser, can be a chore. This is where source maps comes into play.</p>
<p>A source map is a file that maps JavaScript back to it&#8217;s original state. A tutorial on source maps can be found on<a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/"> HTML5 Rocks</a>.</p>
<p>If you are using <a href="https://twitter.com/mkristensen">@mkristensen</a>&#8216;s Web Essentials plugin to Visual Studio, you can enable sourcemaps via &#8216;TOOLS -&gt; OPTIONS -&gt; Web Essentials -&gt; TypeScript&#8217; and setting &#8216;Generate Source Map&#8217; to true.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="http://www.sepier.com/bits/vs2012-options-typescript.png"><img class="aligncenter size-full wp-image-732" alt="vs2012-options-typescript" src="http://www.sepier.com/bits/vs2012-options-typescript.png" width="758" height="441" /></a></p>
<p>&nbsp;</p>
<p>If you are using TypeScript on the command line, you can just in pass the &#8220;-sourcemap&#8221; switch.</p>
<p>Now that we have the actual source map, we will now need to enable source map usage in Chrome. With Developer Tools open, click the bottom settings gear. Under the General tab you will see a check-box for &#8216;Enable source maps&#8217;.</p>
<p>&nbsp;</p>
<p><a href="http://www.sepier.com/bits/chrome-devtools-settings.png"><img class="aligncenter size-full wp-image-736" alt="chrome-devtools-settings" src="http://www.sepier.com/bits/chrome-devtools-settings.png" width="1262" height="279" /></a></p>
<p>&nbsp;</p>
<p>Now that we have source map usage all setup &#8212; when we reload the page in Chrome, our Developer Tools should show both *.ts files and *.js files in the Sources tab. Setting a break point in the JavaScript source will automatically set a breakpoint in our TypeScript file. Even watching variable and the Call Stack is available in our TypeScript file.</p>
<p>&nbsp;</p>
<p><a href="http://www.sepier.com/bits/typescript-debug.png"><img class="aligncenter size-full wp-image-739" alt="typescript-debug" src="http://www.sepier.com/bits/typescript-debug.png" width="1029" height="534" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.sepier.com/bits/typescript-debug-breakpoint.png"><img class="aligncenter size-full wp-image-742" alt="typescript-debug-breakpoint" src="http://www.sepier.com/bits/typescript-debug-breakpoint.png" width="1029" height="534" /></a></p>
<p>The post <a href="http://www.sepier.com/blog/typescript-source-maps/">TypeScript &#038; Source Maps</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/typescript-source-maps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nulunk now on GitHub</title>
		<link>http://www.sepier.com/blog/nulunk-now-on-github/</link>
		<comments>http://www.sepier.com/blog/nulunk-now-on-github/#comments</comments>
		<pubDate>Wed, 02 Jan 2013 01:05:30 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[nulunk]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[splunk]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=704</guid>
		<description><![CDATA[<p>My event and log provider for .NET, Nulunk, is now available on GitHub.  Nulunk uses Splunk as the backend, which persist the data. It is currently built on the Spunk SDK for C# which is in a private preview. Although I am currently using it for a few projects, Nulunk is no where ready for&#160; &#160;<a href="http://www.sepier.com/blog/nulunk-now-on-github/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/nulunk-now-on-github/">Nulunk now on GitHub</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><img class=" wp-image-711 alignright" alt="choudeshell Nulunk · GitHub" src="http://www.sepier.com/bits/choudeshell-Nulunk-·-GitHub.png" width="386" height="210" />My event and log provider for .NET, <a href="https://github.com/choudeshell/Nulunk">Nulunk</a>, is now available on <a href="https://github.com/choudeshell/Nulunk">GitHub</a>.  Nulunk uses Splunk as the backend, which persist the data. It is currently built on the Spunk SDK for C# which is in a private preview. Although I am currently using it for a few projects, Nulunk is no where ready for prime-time. Here are some of the things that I still need to work on:</p>
<ul>
<li>NLog and Log4Net providers</li>
<li>Exceptional state handling if the Splunk server goes down</li>
<li>Local storage if the AppDomain that Nulunk is running in, is recycled/collapses</li>
</ul>
<p>I&#8217;ll be working on Nulunk continually as the Splunk SDK for C# matures and adds features.</p>
<p>&nbsp;</p>
<p>The post <a href="http://www.sepier.com/blog/nulunk-now-on-github/">Nulunk now on GitHub</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/nulunk-now-on-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Splunk as a Backend: Nulunk &amp; Rulunk</title>
		<link>http://www.sepier.com/blog/splunk-as-a-backend-nulunk-rulunk/</link>
		<comments>http://www.sepier.com/blog/splunk-as-a-backend-nulunk-rulunk/#comments</comments>
		<pubDate>Thu, 06 Dec 2012 18:19:21 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[splunk]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=635</guid>
		<description><![CDATA[<p>Splunk now occupies a special place in my toolbox. What is Splunk? Splunk is software to search, monitor and analyze machine-generated data by applications, systems and IT infrastructure at scale via a web-style interface. Splunk captures, indexes and correlates real-time data in a searchable repository from which it can generate graphs, reports, alerts, dashboards and&#160; &#160;<a href="http://www.sepier.com/blog/splunk-as-a-backend-nulunk-rulunk/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/splunk-as-a-backend-nulunk-rulunk/">Splunk as a Backend: Nulunk &#038; Rulunk</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><img class="wp-image-692 alignright" alt="Search   Search   Splunk 5.0.1" src="http://www.sepier.com/bits/Search-Search-Splunk-5.0.1-1024x715.png" width="539" height="376" /></p>
<p>Splunk now occupies a special place in my toolbox. What is Splunk?</p>
<blockquote><p>Splunk is software to search, monitor and analyze machine-generated data by applications, systems and IT infrastructure at scale via a web-style interface. Splunk captures, indexes and correlates real-time data in a searchable repository from which it can generate graphs, reports, alerts, dashboards and visualizations.</p></blockquote>
<p>Although is has some downfalls (ie, it is pricey past the free tier), the ability to run ad-hoc queries, send alerts on custom events, and customize reports has earned itself a place in my toolbox. I only had one problem with adding Splunk to my toolbox; my toolbox was getting a bit full. I had tools of all types, even some specialty tools that did one job, and one job well. Graphite/Statsd was one of these tools.</p>
<blockquote><p>StatsD is a network daemon that runs on the <a href="http://nodejs.org/">Node.js</a> platform and listens for statistics, like counters and timers, sent over <a href="http://en.wikipedia.org/wiki/User_Datagram_Protocol">UDP</a> and sends aggregates to one or more pluggable backend services.</p></blockquote>
<p>and Graphite:</p>
<blockquote><p>Graphite does two things:</p>
<ol>
<li>Store numeric time-series data</li>
<li>Render graphs of this data on demand</li>
</ol>
<p>What Graphite does not do is collect data for you, however there are some <a href="http://graphite.readthedocs.org/en/1.0/tools.html"><em>tools</em></a> out there that know how to send data to graphite. Even though it often requires a little code, <a href="http://graphite.readthedocs.org/en/1.0/feeding-carbon.html"><em>sending data</em></a> to Graphite is very simple.</p></blockquote>
<p>In simple terms, Statsd is the communication mechanism to send events (time series data) whereas Graphite is the backend. I used Graphite &amp; Statsd to send &amp; store time-series events/counters with the ability to view the aggregated values in graphs. Those tools helped answer questions like &#8216;How many users have logged in, in the preceding 5 minutes?&#8221; or even &#8220;How many exceptions has the services hit in the past 20 minutes?&#8221; in real-time.  Any question I had, I could add a few lines of code to app and have Graphite answer it.</p>
<p>At the same time, I was sending almost the same data to Splunk. Splunk was only used as a log store. A place to aggregate all the logs from Apache, Rack, Ruby, IIS, and Event-Log. A great abyss that was only used &#8220;after-the-fact&#8221;, not in realtime.</p>
<p>With the introduction of JSON being a first class citizen in Splunk 5.0, their commitment to their REST API and more robust real-time support, I set out to replace Graphite and Statsd with Splunk. Splunk easily replaced Graphite as the backend. Just send Splunk data and it will consume, index and allow you to query it. The only problem I faced was replacing Statsd. I could easily write the counters/events to a log file and have Splunk parse it, but this wasn&#8217;t elegant. So I turned to their REST API.</p>
<p>Splunk&#8217;s REST API and SDKs (language specific wrappers around their REST API) seemed elegant.  Thus I began to write <a title="Nulunk" href="http://www.sepier.com/projects/nulunk/">Nulunk</a> and Rulunk. Both of these solve the same problem, only with Nulunk solving it for .NET and Rulunk solving it for Ruby. They both solve the problem of structuring time-series and counter data, buffering it and then sending the data to Splunk to be stored and queried. With Splunk doing the heavy lifting Nulunk/Rulunk just have to sort out the small details on the application side.</p>
<p>Although I have been using both in my web applications &#8212; the ability to use Splunk as a Backend has replaced a few tools in my toolbox and opened the door for more uses. I&#8217;ll be open sourcing both Nulunk and Rulunk over Christmas. They are both pre-1.0 so I wouldn&#8217;t recommend using them in production.</p>
<p>The post <a href="http://www.sepier.com/blog/splunk-as-a-backend-nulunk-rulunk/">Splunk as a Backend: Nulunk &#038; Rulunk</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/splunk-as-a-backend-nulunk-rulunk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Essentials &amp; Typescript 0.8.1</title>
		<link>http://www.sepier.com/blog/webessentials-typescript-0-8-1/</link>
		<comments>http://www.sepier.com/blog/webessentials-typescript-0-8-1/#comments</comments>
		<pubDate>Fri, 16 Nov 2012 18:32:52 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[typescript]]></category>
		<category><![CDATA[web essentials]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=584</guid>
		<description><![CDATA[<p>If you are trying to get Web Essentials to work with the newest (0.8.1) version of Typescript; you&#8217;ll need to symlink or rename a folder till @mkristensen pushes an update in the next few days. What do you need to do? Just renamed the .0.8.1.0 folder in C:\Program Files (x86)\Microsoft SDKs\Typescript to .0.8.0.0 (you may&#160; &#160;<a href="http://www.sepier.com/blog/webessentials-typescript-0-8-1/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/webessentials-typescript-0-8-1/">Web Essentials &#038; Typescript 0.8.1</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>If you are trying to get Web Essentials to work with the newest (0.8.1) version of Typescript; you&#8217;ll need to symlink or rename a folder till <a title="https://twitter.com/mkristensen" href="https://twitter.com/mkristensen">@mkristensen</a> pushes an update in the next few days. What do you need to do? Just renamed the <strong>.0.8.1.0</strong> folder in <strong>C:\Program Files (x86)\Microsoft SDKs\Typescript</strong> to <strong>.0.8.0.0</strong> (you may need to delete the older version/rename it).</p>
<p>The post <a href="http://www.sepier.com/blog/webessentials-typescript-0-8-1/">Web Essentials &#038; Typescript 0.8.1</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/webessentials-typescript-0-8-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>VS2012 &amp; EF5: Hanging on build</title>
		<link>http://www.sepier.com/blog/disable-model-validation-on-ef-projects-for-faster-builds/</link>
		<comments>http://www.sepier.com/blog/disable-model-validation-on-ef-projects-for-faster-builds/#comments</comments>
		<pubDate>Thu, 13 Sep 2012 15:50:15 +0000</pubDate>
		<dc:creator>choudeshell</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[entity framework]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://www.sepier.com/?p=216</guid>
		<description><![CDATA[<p>If you&#8217;re like me, you love being on the bleeding edge of technology. Walking on the edge means that when you run into problems, you&#8217;re going to have to diagnose and solve them yourself. One of the few hiccups I&#8217;ve noticed with Visual Studio 2012 and Entity Framework 5 is a very noticeable hang when&#160; &#160;<a href="http://www.sepier.com/blog/disable-model-validation-on-ef-projects-for-faster-builds/">...Continue Reading</a></p><p>The post <a href="http://www.sepier.com/blog/disable-model-validation-on-ef-projects-for-faster-builds/">VS2012 &#038; EF5: Hanging on build</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;re like me, you love being on the bleeding edge of technology. Walking on the edge means that when you run into problems, you&#8217;re going to have to diagnose and solve them yourself.</p>
<p>One of the few hiccups I&#8217;ve noticed with Visual Studio 2012 and Entity Framework 5 is a very noticeable hang when compiling. When the solution is rebuilt, a 5-10 second hang happens before the build even starts. The same project in Visual Studio 2010 and Entity Framework 4 didn&#8217;t have this problem. To isolate the problem from either EF5 or VS2012; I unloaded the EF5 project from the solution, rebuilt and guess what? No more unresponsive hanging. First time was a charm. With that knowledge, it was time to narrow it down to either the main model (EDMX) or one of the T4 templates. Excluding these files one at a time from the project and rebuilding lead me to the problem file; the main model (EDMX) file. Knowing that it was the EDMX file &#8212; my first guess was model validation. I was right.</p>
<p>Model validation, amongst many other feats, provides compile time checks against your model. I am using &#8216;DB-first&#8217; models, so I can disable model validation without many ramifications. Even if you are using &#8216;code-first&#8217; models, I recommend turning this off if you are not actively developing your models or migrating your DB. After I disabled model validation, my 390+ EF models and the rest the code compiled without a hitch.</p>
<h3>Disabling Model Validation within Visual Studio 2012 and Entity Framework 5</h3>
<ol>
<li><strong>Open the EDMX in design view.<br />
</strong><strong> </strong>&nbsp;</p>
<p style="text-align: center;"><img class=" wp-image-224 size-full    aligncenter" title="9-13-2012-11-43-34-AM" alt="" src="http://www.sepier.com/bits/9-13-2012-11-43-34-AM.png" width="652" height="361" /></p>
</li>
<li><strong>In the EDMX properties, set &#8216;Validate On Build&#8217; to false.<br />
<img class="size-full wp-image-226 alignleft" alt="" src="http://www.sepier.com/bits/9-13-2012-11-48-08-AM.png" width="371" height="506" /><br />
</strong></li>
</ol>
<p>&nbsp;</p>
<p>The post <a href="http://www.sepier.com/blog/disable-model-validation-on-ef-projects-for-faster-builds/">VS2012 &#038; EF5: Hanging on build</a> appeared first on <a href="http://www.sepier.com">Sepier</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.sepier.com/blog/disable-model-validation-on-ef-projects-for-faster-builds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
