<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.netevil.org/~d/styles/itemcontent.css"?><rss xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Wez Furlong</title>
    <link>http://wezfurlong.org/</link>
    <description>Software Architect, OpenSourceror</description>
    <language>en</language>
    <pubDate>2012-01-05T22:20:03-05:00</pubDate>
    <lastBuildDate>2012-01-05T22:20:03-05:00</lastBuildDate>
    <atom:updated>2012-01-05T22:20:03-05:00</atom:updated>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>


    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.netevil.org/EvilAsInDr" /><feedburner:info uri="evilasindr" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><link>http://wezfurlong.org</link><url>http://netevil.org/images/wez-head-75.jpg</url><title>Wez Furlong</title></image><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
      <title>jQuery Tools Form Validator and Twitter Bootstrap</title>
      <link>http://feeds.netevil.org/~r/EvilAsInDr/~3/_tkxHR_ke_E/</link>
      <description>&lt;p&gt;I&amp;#8217;ve had a couple of folks ask me about the form validation I &lt;a href="http://wezfurlong.org/blog/2011/dec/nodejs-first-impressions/"&gt;mentioned in my last post&lt;/a&gt;, so here&amp;#8217;s the code.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s fairly basic IMO. This is public domain code; use as you will and at your own risk. You&amp;#8217;ll be able to make a form that looks like this:&lt;/p&gt;

&lt;p&gt;&lt;img alt="Example Form" src="http://wezfurlong.org/images/bootstrap-form.png"&gt;&lt;/p&gt;
&lt;p class="more"&gt;&lt;a href="http://wezfurlong.org/blog/2011/dec/jquery-tools-form-validator-and-twitter-bootstrap/"&gt;Continue reading on wezfurlong.org&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=_tkxHR_ke_E:sGPi1BMnBTo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=_tkxHR_ke_E:sGPi1BMnBTo:i05-1gS0yIQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?i=_tkxHR_ke_E:sGPi1BMnBTo:i05-1gS0yIQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvilAsInDr/~4/_tkxHR_ke_E" height="1" width="1"/&gt;</description>
      <dc:creator>Wez Furlong</dc:creator>
      <author>Wez Furlong</author>
      <comments>http://wezfurlong.org/blog/2011/dec/jquery-tools-form-validator-and-twitter-bootstrap//#comments</comments>
      <guid isPermaLink="false">http://wezfurlong.org/blog/2011/dec/jquery-tools-form-validator-and-twitter-bootstrap/</guid>
		  
      <pubDate>2011-12-20T00:00:00-05:00</pubDate>
      <atom:published>2011-12-20T00:00:00-05:00</atom:published>
      
      <source url="http://wezfurlong.org/">http://wezfurlong.org/</source>
      <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
      
      <category>javascript</category>
      
      <category>jquery</category>
      
    <feedburner:origLink>http://wezfurlong.org/blog/2011/dec/jquery-tools-form-validator-and-twitter-bootstrap/</feedburner:origLink></item>

    <item>
      <title>Node.js - First Impressions</title>
      <link>http://feeds.netevil.org/~r/EvilAsInDr/~3/OG4grWfF9ao/</link>
      <description>&lt;p&gt;I&amp;#8217;ve spent some of my personal time over this past week looking into &lt;a href="http://nodejs.org"&gt;Node.js&lt;/a&gt;. I&amp;#8217;ll be up-front in stating that my efforts have not been particularly broad, but I have gone reasonably deep into the parts that I looked at.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been building evented systems for more than a decade, mostly in the &amp;#8220;C&amp;#8221; language, so Node is particularly interesting to me; it blends an evented I/O model with the Javascript language in such a way that it doesn&amp;#8217;t feel like a continual struggle.&lt;/p&gt;

&lt;p&gt;To get a feel for Node, I decided to look at what it would take to get some kind of &lt;a href="http://mtrack.wezfurlong.org"&gt;mtrack&lt;/a&gt; implementation running on Node; don&amp;#8217;t get too excited, I didn&amp;#8217;t finish anything worthy of public scrutiny.&lt;/p&gt;

&lt;p&gt;For the purposes of the experiment I selected &lt;a href="http://basho.com/products/riak-overview/"&gt;Riak&lt;/a&gt; for the data storage solution; it has a compelling mixture of document storage, full-text searching, secondary indices and map-reduce facilities.&lt;/p&gt;
&lt;p class="more"&gt;&lt;a href="http://wezfurlong.org/blog/2011/dec/nodejs-first-impressions/"&gt;Continue reading on wezfurlong.org&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=OG4grWfF9ao:ILr6dIU4e_Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=OG4grWfF9ao:ILr6dIU4e_Y:i05-1gS0yIQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?i=OG4grWfF9ao:ILr6dIU4e_Y:i05-1gS0yIQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvilAsInDr/~4/OG4grWfF9ao" height="1" width="1"/&gt;</description>
      <dc:creator>Wez Furlong</dc:creator>
      <author>Wez Furlong</author>
      <comments>http://wezfurlong.org/blog/2011/dec/nodejs-first-impressions//#comments</comments>
      <guid isPermaLink="false">http://wezfurlong.org/blog/2011/dec/nodejs-first-impressions/</guid>
		  
      <pubDate>2011-12-18T00:00:00-05:00</pubDate>
      <atom:published>2011-12-18T00:00:00-05:00</atom:published>
      
      <source url="http://wezfurlong.org/">http://wezfurlong.org/</source>
      <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
      
      <category>nodejs</category>
      
    <feedburner:origLink>http://wezfurlong.org/blog/2011/dec/nodejs-first-impressions/</feedburner:origLink></item>

    <item>
      <title>Two Factor SSH on Joyent SmartMachines</title>
      <link>http://feeds.netevil.org/~r/EvilAsInDr/~3/qtraF8Sq_1E/</link>
      <description>&lt;p&gt;After reading &lt;a href="http://www.secretgeek.net/sg_hijack_1.asp"&gt;this scary blog entry about domain hijacking&lt;/a&gt; I&amp;#8217;ve been a bit concerned about brute forcing of credentials and have been turning on the two-factor authentication facilities that folks like Google provide for my gmail and personal domains.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve just found out about &lt;a href="http://www.duosecurity.com/"&gt;Duo Security&lt;/a&gt;, a service that allows you to add two-factor authentication to your SSH server, Juniper VPN and even Wordpress blogs. Their service is free for up to 10 users and they start charging when you pass that threshold.&lt;/p&gt;

&lt;p&gt;Read on to find out how to set it up.&lt;/p&gt;
&lt;p class="more"&gt;&lt;a href="http://wezfurlong.org/blog/2011/jun/two-factor-ssh-on-joyent/"&gt;Continue reading on wezfurlong.org&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=qtraF8Sq_1E:SFD7xJKiKYc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=qtraF8Sq_1E:SFD7xJKiKYc:i05-1gS0yIQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?i=qtraF8Sq_1E:SFD7xJKiKYc:i05-1gS0yIQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvilAsInDr/~4/qtraF8Sq_1E" height="1" width="1"/&gt;</description>
      <dc:creator>Wez Furlong</dc:creator>
      <author>Wez Furlong</author>
      <comments>http://wezfurlong.org/blog/2011/jun/two-factor-ssh-on-joyent//#comments</comments>
      <guid isPermaLink="false">http://wezfurlong.org/blog/2011/jun/two-factor-ssh-on-joyent/</guid>
		  
      <pubDate>2011-06-09T00:00:00-04:00</pubDate>
      <atom:published>2011-06-09T00:00:00-04:00</atom:published>
      
      <source url="http://wezfurlong.org/">http://wezfurlong.org/</source>
      <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
      
      <category>Solaris</category>
      
      <category>Joyent</category>
      
    <feedburner:origLink>http://wezfurlong.org/blog/2011/jun/two-factor-ssh-on-joyent/</feedburner:origLink></item>

    <item>
      <title>I'll be at Surge</title>
      <link>http://feeds.netevil.org/~r/EvilAsInDr/~3/rp4KDZ6u-jY/</link>
      <description>&lt;p&gt;I&amp;#8217;m pleased to announce that my proposal for the OmniTI Surge 2011 Conference has been accepted!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://omniti.com/surge/2011/speakers/wez-furlong"&gt;TL;DR: read the session description at the Surge site&lt;/a&gt;, otherwise, read on for some background and additional commentary.&lt;/p&gt;
&lt;p class="more"&gt;&lt;a href="http://wezfurlong.org/blog/2011/may/i-will-be-at-surge/"&gt;Continue reading on wezfurlong.org&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=rp4KDZ6u-jY:IewqKS_0_gw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=rp4KDZ6u-jY:IewqKS_0_gw:i05-1gS0yIQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?i=rp4KDZ6u-jY:IewqKS_0_gw:i05-1gS0yIQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvilAsInDr/~4/rp4KDZ6u-jY" height="1" width="1"/&gt;</description>
      <dc:creator>Wez Furlong</dc:creator>
      <author>Wez Furlong</author>
      <comments>http://wezfurlong.org/blog/2011/may/i-will-be-at-surge//#comments</comments>
      <guid isPermaLink="false">http://wezfurlong.org/blog/2011/may/i-will-be-at-surge/</guid>
		  
      <pubDate>2011-05-24T00:00:00-04:00</pubDate>
      <atom:published>2011-05-24T00:00:00-04:00</atom:published>
      
      <source url="http://wezfurlong.org/">http://wezfurlong.org/</source>
      <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
      
      <category>Conferences</category>
      
      <category>Surge</category>
      
    <feedburner:origLink>http://wezfurlong.org/blog/2011/may/i-will-be-at-surge/</feedburner:origLink></item>

    <item>
      <title>Short Sleeps on Solaris</title>
      <link>http://feeds.netevil.org/~r/EvilAsInDr/~3/WCV53fbHsts/</link>
      <description>&lt;p&gt;&lt;a href="http://dtrace.org/blogs/brendan/"&gt;Brendan Gregg&lt;/a&gt; raised this question on Twitter: &lt;a href="https://twitter.com/brendangregg/status/72822508327407616"&gt;Cruel interview question: write a program on Solaris that sleeps for &amp;lt; 1 ms&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The first choice that springs to mind is nanosleep(3RT), but you&amp;#8217;ll be frustrated because your requested sleep interval is implemented in terms of the standard clock frequency, making you sleep for longer.&lt;/p&gt;

&lt;p&gt;So how do you sleep (not busy wait!) for time periods shorter than the regular clock?&lt;/p&gt;
&lt;p class="more"&gt;&lt;a href="http://wezfurlong.org/blog/2011/may/short-sleeps-on-solaris/"&gt;Continue reading on wezfurlong.org&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=WCV53fbHsts:aLyBh1pG7rI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=WCV53fbHsts:aLyBh1pG7rI:i05-1gS0yIQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?i=WCV53fbHsts:aLyBh1pG7rI:i05-1gS0yIQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvilAsInDr/~4/WCV53fbHsts" height="1" width="1"/&gt;</description>
      <dc:creator>Wez Furlong</dc:creator>
      <author>Wez Furlong</author>
      <comments>http://wezfurlong.org/blog/2011/may/short-sleeps-on-solaris//#comments</comments>
      <guid isPermaLink="false">http://wezfurlong.org/blog/2011/may/short-sleeps-on-solaris/</guid>
		  
      <pubDate>2011-05-23T00:00:00-04:00</pubDate>
      <atom:published>2011-05-23T00:00:00-04:00</atom:published>
      
      <source url="http://wezfurlong.org/">http://wezfurlong.org/</source>
      <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
      
      <category>Solaris</category>
      
    <feedburner:origLink>http://wezfurlong.org/blog/2011/may/short-sleeps-on-solaris/</feedburner:origLink></item>

    <item>
      <title>Linux on Windows</title>
      <link>http://feeds.netevil.org/~r/EvilAsInDr/~3/Xps-nHfTOuM/</link>
      <description>&lt;p&gt;[Update: &lt;a href="https://bitbucket.org/wez/pengwin"&gt;You can now find
  the source code for this on bitbucket&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Call me crazy, but I've wanted to run a linux binary natively under
windows for a while now; kinda like &lt;a href="http://www.winehq.com"&gt;wine&lt;/a&gt;, but in reverse.&lt;/p&gt;

&lt;p&gt;Well, the other day I was browsing through the MSDN docs (as you do)
and discovered that it is possible to install a "vectored" exception
handler.  A quick bit of test code later, and I discovered that I can
trap "int 0x80" instructions using this technique--those are used by
linux binaries to initiate syscalls.&lt;/p&gt;

&lt;p&gt;A couple of days hacking later, and I have a very small linux kernel
emulation environment; it's split into two parts--low.dll (the kernel
code) and low.exe (the bootstrap).  The usage is quite simple; from your
command prompt, run the linux binary of choice by prefixing the command
line with "low.exe":&lt;/p&gt;&lt;p&gt;low.exe linuxsmallapp one two three
four&lt;/p&gt;&lt;p&gt;&lt;a href="http://wezfurlong.org/images/pengwin.png"&gt;&lt;img src="http://wezfurlong.org/images/pengwin.thumb.png" width="150" height="85" border="1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code from the named linux binary is loaded (low.dll includes an
ELF loader) and bootstraps the process by faking an execve() syscall.
When the syscall returns, the code resumes execution inside the loaded
module.  The code is running natively on your processor; and syscalls
happen in userspace (just like the binary) although they run under a
separate stack inside the win32 exception handler code.  So, this is
almost like kernel space.&lt;/p&gt;

&lt;p&gt;What I have now is good enough to run my simple hello world
application.  It doesn't yet handle dynamic elf executables--they need
to be statically linked.   Thanks to Tal Peer, I have a collection of
statically compiled coreutils from gentoo; they start up fine, but die
somewhere in the stdio part of libc. I'm trying to track down the
problem.&lt;/p&gt;

&lt;p&gt;If anyone has any insight into why this might be (maybe windows is
doing stuff for software interrupt number 128? before it calls my
exception handler?), I'd like to hear it :-)&lt;/p&gt;

&lt;p&gt;[Update] If you're interested in playing with it, please don't expect
to acheive much at this stage.  You can &lt;a href="https://bitbucket.org/wez/pengwin/downloads/low-0.1.zip"&gt;download
  it here&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=Xps-nHfTOuM:1vX44Fgp8iI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.netevil.org/~ff/EvilAsInDr?a=Xps-nHfTOuM:1vX44Fgp8iI:i05-1gS0yIQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvilAsInDr?i=Xps-nHfTOuM:1vX44Fgp8iI:i05-1gS0yIQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvilAsInDr/~4/Xps-nHfTOuM" height="1" width="1"/&gt;</description>
      <dc:creator>Wez Furlong</dc:creator>
      <author>Wez Furlong</author>
      <comments>http://wezfurlong.org/blog/2004/jan/linux-on-windows//#comments</comments>
      <guid isPermaLink="false">http://wezfurlong.org/blog/2004/jan/linux-on-windows/</guid>
		  
      <pubDate>2011-05-22</pubDate>
      <atom:updated>2011-05-22</atom:updated>
      <atom:published>2004-01-19T07:44:10-05:00</atom:published>
      
      <source url="http://wezfurlong.org/">http://wezfurlong.org/</source>
      <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
      
      <category>Blog</category>
      
    <feedburner:origLink>http://wezfurlong.org/blog/2004/jan/linux-on-windows/</feedburner:origLink></item>

  </channel>
</rss>

