Преглед изворни кода

added projects and updated resume/index pages

Casey DeLorme пре 10 година
родитељ
комит
599d5a6789

+ 2 - 2
public/index.html

@@ -4,7 +4,7 @@
         <meta charset="utf-8">
         <title>index | Casey DeLorme's Portfolio / caseydelorme.com</title>
         <link rel="icon" type="image/x-icon" href="https://d2xxklvztqk0jd.cloudfront.net/favicon.ico" />
-        <link rel="stylesheet" type="text/css" href="/css/main.css#825bc4e">
+        <link rel="stylesheet" type="text/css" href="/css/main.css#89872b9">
     </head>
     <body>
         <header>
@@ -42,7 +42,7 @@
             <a href='https://github.com/cdelorme' class='link github'></a>
             <a href='skype:casey.delorme?chat' class='link skype'></a>
             <div class="scripts">
-                <script type="text/javascript" src="/js/main.js#825bc4e" async></script>
+                <script type="text/javascript" src="/js/main.js#89872b9" async></script>
             </div>
         </footer>
 

+ 78 - 0
public/projects/caseydelorme.com.html

@@ -0,0 +1,78 @@
+<!doctype html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <title>caseydelorme.com | Casey DeLorme's Portfolio / caseydelorme.com</title>
+        <link rel="icon" type="image/x-icon" href="https://d2xxklvztqk0jd.cloudfront.net/favicon.ico" />
+        <link rel="stylesheet" type="text/css" href="/css/main.css#89872b9">
+    </head>
+    <body>
+        <header>
+            <a href='/'><h1>Casey DeLorme</h1></a>
+            
+            <nav>
+                <ul>
+                
+                    <li><a href='/blog/'>blog</a></li>
+                
+                    <li><a href='/index.html'>index</a></li>
+                
+                    <li><a href='/resume.html'>resume</a></li>
+                
+                </ul>
+            </nav>
+            
+        </header>
+
+        <div class="content group">
+            <h1><a href="https://github.com/cdelorme/caseydelorme.com">caseydelorme.com</a></h1>
+
+<p>This site began with the concept of a simplified static site generator.  As a result I built <a href="staticmd.html">staticmd</a> first.</p>
+
+<p>The goal of this site was to replace a traditional dynamic system with raw static content.  I would then replace (and redirect) my <a href="http://www.cdelorme.com">old site</a> with this one.</p>
+
+<h2>design considerations</h2>
+
+<p>One major consideration was taking advantage of content delivery using AWS S3 and CloudFront services for any static or binary contents.  This provides a significantly greater degree of scalability, in that I can create as many servers as necessary to deliver the websites static content, while binary/static files all come from one place.</p>
+
+<p>Right now that includes images, fonts, and some static third-party css and javascript.  Because my own css and javascript are still under construction it made sense to include them using git-hash-versioning.  This ensures the browser won&rsquo;t cache incorrectly.  <em>In the future I could use that versioning to minify, name, and upload my content to S3 and use the CDN exclusively for all versions.</em></p>
+
+<p>Another advantage to moving away from a dynamic website is that when dealing with basic static html we can enable simple caching directly through nginx without concern for other layers; there is no CMS to contend with or concern for &ldquo;immediately up-to-date&rdquo; contents.</p>
+
+<p>I decided to implement <code>https</code> because I intend to use the domain for experiments from time to time, and also <a href="https://www.startssl.com/">because it&rsquo;s free</a>.</p>
+
+<p>Finally, I am using git, as well as github, as a means of version control for my website now.  This allows me to enable a simple cronjob to pull changes hourly, and know that I can update my site from any computer by simply pushing new static html to the github repository.  This also means I have a backup, and a means of distribution/deployment in a way that is scalable.</p>
+
+<h2>future plans</h2>
+
+<p>I have a list of enhancements I&rsquo;d like to add in the future, which may involve changes to my <code>staticmd</code> project as well:</p>
+
+<ul>
+<li>move css and javascript to cdn</li>
+<li>implement date tracking</li>
+<li>improved indexing, navigation, and primary index file identification</li>
+</ul>
+
+<p>For any binary file or large file it would make sense to keep it out of the repository and to use a content delivery network.  However, for the builtin css and javascript, being so small, there isn&rsquo;t a problem having as many copies as there are machines with the content.  Further, if I needed to scale the deployment mechanism uses the repository and should always have the latest copy of content.  That said, using some sort of task automator, like <a href="http://gruntjs.com/">grunt</a>, would allow me to minify, name, and upload my javascript and css to the same AWS CloudFront I use for other files.  If anything it would be good practice for any future sites I choose to work on.</p>
+
+<p>I would like to be able to identify when a file was created and last updated, and provide these either below the first header, or at the bottom of the content.  For now, the date created and updated is technically accessible in the repository, but readers won&rsquo;t want to be bothered to look that far, so I can manually add dates for the time being.  The concerns here include whether the file system will correctly track the date created and modified of a file, especially if the files consist of a fresh clone.</p>
+
+<p>I took shortcuts with the current implementation of staticmd&rsquo;s index builder and identification.  Ideally I wanted to go the github route and work with <code>readme.md</code> as the <strong>primary</strong> index file.  However, to conditionally pick between two possible index files adds a bunch more complication, so I ended up sticking with one.  In the future I would like to correct this, and improve how I generate the indexes and main navigation as well.  Things like sort-by-date-order, folders-first, and intelligently ignoring index pages (again complications if two files could both potentially be an index page).</p>
+
+<h5><em>written on 2014-12-22</em></h5>
+
+        </div>
+
+        <footer>
+            <a href='https://www.facebook.com/CaseyRDeLorme' class='link facebook'></a>
+            <a href='https://www.linkedin.com/in/cdelorme' class='link linkedin'></a>
+            <a href='https://www.youtube.com/user/LordOfElm' class='link youtube'></a>
+            <a href='https://github.com/cdelorme' class='link github'></a>
+            <a href='skype:casey.delorme?chat' class='link skype'></a>
+            <div class="scripts">
+                <script type="text/javascript" src="/js/main.js#89872b9" async></script>
+            </div>
+        </footer>
+
+    </body>
+</html>

+ 81 - 0
public/projects/level6.html

@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <title>level6 | Casey DeLorme's Portfolio / caseydelorme.com</title>
+        <link rel="icon" type="image/x-icon" href="https://d2xxklvztqk0jd.cloudfront.net/favicon.ico" />
+        <link rel="stylesheet" type="text/css" href="/css/main.css#89872b9">
+    </head>
+    <body>
+        <header>
+            <a href='/'><h1>Casey DeLorme</h1></a>
+            
+            <nav>
+                <ul>
+                
+                    <li><a href='/blog/'>blog</a></li>
+                
+                    <li><a href='/index.html'>index</a></li>
+                
+                    <li><a href='/resume.html'>resume</a></li>
+                
+                </ul>
+            </nav>
+            
+        </header>
+
+        <div class="content group">
+            <h1><a href="https://github.com/cdelorme/level6">level6</a></h1>
+
+<p>This was a fun and amusing project I chose to build for a variety of reasons.  I myself have roughly 6 terrabytes of personal data files, a lot of which includes images, videos, and of course copious amounts of text files from project source code.</p>
+
+<p>While my scale is perhaps a bit larger, my problem is no different than that which my family and friends face regularly.  There are no free or simple tools out there that will handle file deduplication flexibly and efficiently.</p>
+
+<p>My goal with this project was to create a free and open source software that could handle file deduplication on personal computers.  Ideally at break-neck speed, but with a high degree of accuracy.</p>
+
+<p>The name of the project came about from the concept of destroying cloned files.  As an avid anime fan I decided to name it after a particular project in a series I enjoyed, although the connotation of the project in that series is certainly darker than the purpose of this project.</p>
+
+<h2>design considerations</h2>
+
+<p>Originally I wanted to simply go with sha256 hash comparison.  My first implementation simply created a list of hashes for every file in a single threaded loop and printed out sets of results by hash.</p>
+
+<p>Then, as I read more about comparison, I realized that file size is relevant.  I took the single core file walk and grouped files by their size, then created sha256 hashes.  I proceeded to add options to delete or move the files, and json support for output such that it could be consumed and used by other applications in an easier way.</p>
+
+<p>My next stage was adding concurrency, which was my first attempt at golangs concurrency model.  It was actually quite refreshing once I understood how it worked, and I managed to improve the performance of the software quite a bit.</p>
+
+<p>I showed it to a few friends who gave me some suggestions, including adding summary data such as how many files were scanned, how many hashes were generated, and how long the operation took.  Another suggestion was to use a lighter hashing algorithm as a stop-gap before generating sha256 hashes.  This turned out to be another boon to performance, since sha256 is an expensive algorithm compared to something like crc32, so I added crc32 as a first-measure before running sha256 hashing.  I implemented full counts of how many hashes were generated, plus how many duplicates were found.</p>
+
+<p>The end result is roughly 600 lines of code, which can provide a very fast way to identify and manage duplicate files.  There is still a lot of room for improvement, but I&rsquo;m pretty happy with how quickly I was able to put it together.</p>
+
+<h2>future plans</h2>
+
+<ul>
+<li>dodgy windows compatibility</li>
+<li>byte-comparison for large files and 100%-accuracy going a step beyond sha256</li>
+<li>core library, cli &amp; gui repositories</li>
+<li>detailed multimedia comparison</li>
+</ul>
+
+<p>Tests on Windows Vista 32 bit have crashed, but Windows 8.1 64 bit work.  However, on Windows it seems that resource-exhaustion occurs during which the OS forces the program to close.  This problem stems from its less-than-frugal use of ram to store contents when generating sha256 hashes.  One solution is to set a max-size, and simply omit them from comparison.  This seems to have worked well in my test cases, but it&rsquo;s obviously not perfect.</p>
+
+<p>I would like to implement byte-by-byte comparison for a more detailed approach to comparing two files.  While the odds of sha256 conflict are absurd, this would give us a 100% trust option for identifying duplicates.  Similarly it would allow us to assume a safe arbitrary max file size, reducing necessary cli arguments, and still being capable of parsing very large files.</p>
+
+<p>I already worked to separate the code into its own library folder, but in the future I want to separate that as its own repository, then import and use it with both a cli and gui implementation.  This would allow something like <code>level6-sdl</code> to provide a graphical interface, stacked ontop of the same source as the cli implementation.</p>
+
+<p>I would like to use more detailed comparison methods against images, videos, and audio.  Algorithms that identify key-points in similar files, and can draw conclusions such as altered contrast, brightness, cropping, rotation, etc and still manage to match similar items.  These small changes may barely be visible in the files themselves but would cause hash or byte comparison to fail.</p>
+
+        </div>
+
+        <footer>
+            <a href='https://www.facebook.com/CaseyRDeLorme' class='link facebook'></a>
+            <a href='https://www.linkedin.com/in/cdelorme' class='link linkedin'></a>
+            <a href='https://www.youtube.com/user/LordOfElm' class='link youtube'></a>
+            <a href='https://github.com/cdelorme' class='link github'></a>
+            <a href='skype:casey.delorme?chat' class='link skype'></a>
+            <div class="scripts">
+                <script type="text/javascript" src="/js/main.js#89872b9" async></script>
+            </div>
+        </footer>
+
+    </body>
+</html>

+ 81 - 0
public/projects/staticmd.html

@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <title>staticmd | Casey DeLorme's Portfolio / caseydelorme.com</title>
+        <link rel="icon" type="image/x-icon" href="https://d2xxklvztqk0jd.cloudfront.net/favicon.ico" />
+        <link rel="stylesheet" type="text/css" href="/css/main.css#89872b9">
+    </head>
+    <body>
+        <header>
+            <a href='/'><h1>Casey DeLorme</h1></a>
+            
+            <nav>
+                <ul>
+                
+                    <li><a href='/blog/'>blog</a></li>
+                
+                    <li><a href='/index.html'>index</a></li>
+                
+                    <li><a href='/resume.html'>resume</a></li>
+                
+                </ul>
+            </nav>
+            
+        </header>
+
+        <div class="content group">
+            <h1><a href="https://github.com/cdelorme/staticmd">staticmd</a></h1>
+
+<p>I looked at some alternatives such as <a href="http://harpjs.com/">harpjs</a> and <a href="http://gohugo.io/">hugo</a>, and while both of them are fantastic tools, I wanted something much more basic.</p>
+
+<p>I feel that the moment the content for a website has the need for configuration files, you are no longer building a basic static site but a dynamic site with a print release system.  While there is nothing inherently wrong with this approach, it seems overkill for a number of projects I&rsquo;d like to build.</p>
+
+<p>My goal with this code was not just a basic static site generator, but the ability to compile many files into a single <em>&ldquo;book&rdquo;</em>.  Ideally the ability to do so using a single template file, and with nothing more complicated than a handful of variables inside it.</p>
+
+<h2>design considerations</h2>
+
+<p>The code needed two paths, one for making a single page book, and one for making a multi page site.  There also needed to be a split in the path for multi page generation that allowed for relative paths, so it could be used/accessed like locally generated documentation.</p>
+
+<p>I was also creating this as a <a href="https://www.youtube.com/watch?v=gsPabU09FFM">work-project</a>, and had a deadline to meet.  So I dropped some of the objectives from the original design, such as multiple index support, and some of the navigation logic was changed when I looked at how some others were doing it, like <a href="http://stevelosh.com/">Steve Losh</a>.</p>
+
+<h2>future plans</h2>
+
+<p>I have a few things I&rsquo;d like to refactor, features to add, and components to rebuild:</p>
+
+<ul>
+<li>moving the core logic to a separate library, and making a <code>staticmd-cli</code> repository</li>
+<li>rewriting the index generator for single page and multiple page more intelligently</li>
+<li>revisit and cleanup the process of building list of files, and filters</li>
+<li>addition of optional configuration file support</li>
+</ul>
+
+<p>The core of the system which currently accepts cli inputs could be adjusted such that the cli logic is independent.  This would allow me to, in the future, create a graphical interface version (ex. <code>staticmd-sdl</code>).  It&rsquo;s something I&rsquo;ve experimented with in my <a href="level6.html"><code>level6</code> project</a>.</p>
+
+<p>I have several concerns with the current implementation that generates indexes or table-of-contents.  For the single page code I never created a means to sort the contents (it assumes file system order which should be alphabetical).  This also means the title of the section, which should point to the index, is not a link because the order it lists the content is not controlled (linking would potentially put you in the middle of that sub-section of content).  The multi page index generation currently has to go through extra rounds when using relative links, and like before control over order is only by name.  Ideally I want to be able to sort via folders-first for multi-page generation, and some alternative for single-page that allows more control over the order.  Fixing how the content builds when using single page such that index contents are the first loaded in sub-sections, and being able to link to them would be ideal.</p>
+
+<p>I want to revisit and cleanup how I create the list of files, folders, and apply filters such as the accepted markdown file types, or which paths to ignore.  Right now the code and the way the logic is split does not feel efficient.  I&rsquo;d like to make it more readable, without killing performance.</p>
+
+<p>While my original concept was to avoid configuration files, I am seeing where the need arises.  If filtered paths, accepted file types, and a bunch of other properties become flagged options, the command to insert all of this becomes just as complicated as a configuration file.  I would like to do what I can to allow configuration file support, with flags for the same set of options, and fallback to a set of <em>sane</em> default values otherwise.</p>
+
+<h2>references</h2>
+
+<p>I&rsquo;ve been fond of reading about game development lately, and came across <a href="http://gameprogrammingpatterns.com/">gameprogrammingpatterns.com/</a>, which was written using markdown.  This is primarily because the best practices we use in our field today so greatly conflict with game developments version of best practices where performance far outweighs the value of things like object-oriented-design.</p>
+
+<p>Another great resource I found was <a href="http://www.golang-book.com/">the golang book</a>, which is also written in markdown.  I find great beauty in the simplest of aesthetics, and this is a perfect example of that.</p>
+
+        </div>
+
+        <footer>
+            <a href='https://www.facebook.com/CaseyRDeLorme' class='link facebook'></a>
+            <a href='https://www.linkedin.com/in/cdelorme' class='link linkedin'></a>
+            <a href='https://www.youtube.com/user/LordOfElm' class='link youtube'></a>
+            <a href='https://github.com/cdelorme' class='link github'></a>
+            <a href='skype:casey.delorme?chat' class='link skype'></a>
+            <div class="scripts">
+                <script type="text/javascript" src="/js/main.js#89872b9" async></script>
+            </div>
+        </footer>
+
+    </body>
+</html>

+ 3 - 3
public/resume.html

@@ -4,7 +4,7 @@
         <meta charset="utf-8">
         <title>resume | Casey DeLorme's Portfolio / caseydelorme.com</title>
         <link rel="icon" type="image/x-icon" href="https://d2xxklvztqk0jd.cloudfront.net/favicon.ico" />
-        <link rel="stylesheet" type="text/css" href="/css/main.css#825bc4e">
+        <link rel="stylesheet" type="text/css" href="/css/main.css#89872b9">
     </head>
     <body>
         <header>
@@ -34,7 +34,7 @@
 
 <h2>objective</h2>
 
-<p>Automate all repeatable tasks and write efficient well formatted code that both challenges and forges best practices.</p>
+<p>Automate repetative tasks and write efficient well formatted code that both challenges and forges tomorrows best practices.</p>
 
 <h2>skills</h2>
 
@@ -176,7 +176,7 @@
             <a href='https://github.com/cdelorme' class='link github'></a>
             <a href='skype:casey.delorme?chat' class='link skype'></a>
             <div class="scripts">
-                <script type="text/javascript" src="/js/main.js#825bc4e" async></script>
+                <script type="text/javascript" src="/js/main.js#89872b9" async></script>
             </div>
         </footer>