<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Web Development on Bloodforge Blog</title><link>https://www.bloodforge.com/categories/web-development/</link><description>Recent content in Web Development on Bloodforge Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 19 Jan 2017 00:00:27 +0000</lastBuildDate><atom:link href="https://www.bloodforge.com/categories/web-development/index.xml" rel="self" type="application/rss+xml"/><item><title>Running Local Web Pages in CefSharp.WPF</title><link>https://www.bloodforge.com/2017/01/running-local-web-pages-in-cefsharp-wpf/</link><pubDate>Thu, 19 Jan 2017 00:00:27 +0000</pubDate><guid>https://www.bloodforge.com/2017/01/running-local-web-pages-in-cefsharp-wpf/</guid><description>&lt;p&gt;I needed to create a program which will run a web page from the local file system. Using the WebBrowser control wasn&amp;#8217;t really an option since that uses the Trident engine which didn&amp;#8217;t support many of the things we were trying to do in the web page. I went with the latest build of&amp;nbsp;&lt;a href="https://www.nuget.org/packages/CefSharp.Wpf/"&gt;CefSharp.Wpf&lt;/a&gt;, but that doesn&amp;#8217;t natively run local files, so it had to be modified. Fortunately, I found some posts on how to enable that feature (&lt;a href="https://thechriskent.com/2014/04/21/use-local-files-in-cefsharp/"&gt;here&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="https://github.com/cefsharp/CefSharp/blob/master/CefSharp.Example/CefSharpSchemeHandler.cs"&gt;here&lt;/a&gt;) &amp;#8211; however, the first link was for an older version of CefSharp, and the second link only works with static resource files. I ended up merging both concepts to get it to work.&lt;/p&gt;</description></item><item><title>The jQuery Bloodforge Smoke Effect</title><link>https://www.bloodforge.com/2015/06/the-jquery-bloodforge-smoke-effect/</link><pubDate>Fri, 12 Jun 2015 00:00:10 +0000</pubDate><guid>https://www.bloodforge.com/2015/06/the-jquery-bloodforge-smoke-effect/</guid><description>&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"&gt;&lt;/script&gt;
&lt;fieldset&gt;&lt;legend&gt;Adjust the smoke in this post header&lt;/legend&gt;
&lt;div class="smoke-adjust"&gt;&lt;label for="smoke-color"&gt;Color&lt;/label&gt; &lt;input id="smoke-color" type="color" value="#000000"&gt;&lt;/div&gt;
&lt;div class="smoke-adjust"&gt;&lt;label for="smoke-opacity"&gt;Opacity&lt;/label&gt; &lt;input id="smoke-opacity" max="1" min="0" step="0.01" type="range" value="0.2"&gt;&lt;/div&gt;
&lt;div class="smoke-adjust"&gt;&lt;label for="smoke-speed"&gt;Speed&lt;/label&gt; &lt;input id="smoke-speed" max="200" min="1" step="1" type="range" value="50"&gt;&lt;/div&gt;
&lt;div class="smoke-adjust"&gt;&lt;label for="smoke-size"&gt;Particle Size&lt;/label&gt; &lt;input id="smoke-size" max="500" min="10" step="1" type="range" value="150"&gt;&lt;/div&gt;
&lt;div class="smoke-adjust"&gt;&lt;label for="smoke-density"&gt;Density&lt;/label&gt; &lt;input id="smoke-density" max="20" min="1" step="1" type="range" value="10"&gt;&lt;/div&gt;
&lt;/fieldset&gt;
&lt;script&gt;
// &lt;![CDATA[
/*
Bloodforge Smoke Effect v1.4
Copyright (c) 2017 Filip Stanek (http://bloodforge.com)
Based off code written by Johny Cornwell (http://www.blog.jonnycornwell.com/)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
&lt;p&gt;// A function to create a particle object.
function Particle(context, canvasWidth, canvasHeight) {&lt;/p&gt;</description></item><item><title>Thermostat Statistics via Logs for Honeywell Prestige IAQ 2</title><link>https://www.bloodforge.com/2014/11/thermostat-statistics-via-logs-for-honeywell-prestige-iaq-2/</link><pubDate>Fri, 21 Nov 2014 00:00:23 +0000</pubDate><guid>https://www.bloodforge.com/2014/11/thermostat-statistics-via-logs-for-honeywell-prestige-iaq-2/</guid><description>&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter size-large"&gt;&lt;img loading="lazy" width="500" height="415" src="https://www.bloodforge.com/wp-content/uploads/2020/02/energypreview.png" alt="" class="wp-image-186" srcset="https://www.bloodforge.com/wp-content/uploads/2020/02/energypreview.png 500w, https://www.bloodforge.com/wp-content/uploads/2020/02/energypreview-300x249.png 300w" sizes="(max-width: 500px) 100vw, 500px" /&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I created a log viewer for my Honeywell thermostat. In addition to providing a much more friendly way of viewing log files, it aggregates logs over time allowing for some pretty neat analysis.&lt;/p&gt;
&lt;p&gt;The site is located at &lt;a href="http://energy.bloodforge.com/"&gt;http://energy.bloodforge.com&lt;/a&gt; (sorry, but this site isn&amp;#8217;t active anymore)&lt;/p&gt;</description></item><item><title>Updating my BlogEngine.NET blog to use SSL (HTTPS) from HTTP</title><link>https://www.bloodforge.com/2014/10/updating-my-blogengine-net-blog-to-use-ssl-https-from-http/</link><pubDate>Tue, 28 Oct 2014 00:00:23 +0000</pubDate><guid>https://www.bloodforge.com/2014/10/updating-my-blogengine-net-blog-to-use-ssl-https-from-http/</guid><description>&lt;p&gt;I’m using this post to document how I upgraded my blog for HTTPS.&lt;/p&gt;
&lt;p&gt;The first thing I needed to do was to get a SSL certificate. I really didn’t feel like paying for one, so I went with a free certificate from&amp;nbsp;&lt;a href="http://www.startssl.com/"&gt;StartSSL&lt;/a&gt;. Their free certificates expire after a year (I wish it was longer), so I’ll need to do this again next year.&amp;nbsp; But they work and… they’re free.&lt;/p&gt;
&lt;p&gt;After I got my p12 certificate above, I asked my web host (Arvixe) to set everything up. It took them about 2 days (it was the weekend though, so maybe it would have been faster if it was during the week). This was pretty much the easiest part since all I had to do was to provide them with the cert, and they got it installed and set up the correct ports for HTTPS.&lt;/p&gt;</description></item><item><title>jQuery 1.9 and UI 1.10 tabs with cookies</title><link>https://www.bloodforge.com/2013/01/jquery-1-9-and-ui-1-10-tabs-with-cookies/</link><pubDate>Wed, 02 Jan 2013 00:00:38 +0000</pubDate><guid>https://www.bloodforge.com/2013/01/jquery-1-9-and-ui-1-10-tabs-with-cookies/</guid><description>&lt;p&gt;Seems like jQuery UI got rid of maintaining state with the latest implementation.&lt;/p&gt;
&lt;p&gt;Before, it pretty simple to keep state across page loads with jQuery tabs. This is one possible way to do it with the new code.&amp;nbsp; Its still pretty easy, just a little different.&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;$("#tabs").tabs({
activate: function (e, ui) {
$.cookie('selected-tab', ui.newTab.index(), { path: '/' });
},
active: $.cookie('selected-tab')
});&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>My fix for: Application Descriptor File Cannot be Parsed in CS6</title><link>https://www.bloodforge.com/2012/08/my-fix-for-application-descriptor-file-cannot-be-parsed-in-cs6/</link><pubDate>Sat, 18 Aug 2012 00:00:01 +0000</pubDate><guid>https://www.bloodforge.com/2012/08/my-fix-for-application-descriptor-file-cannot-be-parsed-in-cs6/</guid><description>&lt;p&gt;I received the following error when trying to publish to Android and iOS from Flash CS6 (Air 3.2):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Application Descriptor File Cannot be Parsed&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Searching for a fix yielded that my file is probably invalid, but this is not the case as I can run this project just file from another computer.&lt;/p&gt;
&lt;p&gt;Turns out that this problem came up because I was running my FLA out of a network location (i.e,&amp;nbsp;&lt;em&gt;\\Server\path\&lt;/em&gt;). Mapping the network drive to an actual drive letter fixed the problem.&lt;/p&gt;</description></item><item><title>fl.text.TCMText and TLFTextField: Why does it appear?</title><link>https://www.bloodforge.com/2012/07/fl-text-tcmtext-and-tlftextfield-why-does-it-appear/</link><pubDate>Thu, 05 Jul 2012 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2012/07/fl-text-tcmtext-and-tlftextfield-why-does-it-appear/</guid><description>&lt;p&gt;This is a note to self:&lt;/p&gt;
&lt;p&gt;Flash generates TCMText when a TLFTextField does not have an instance name.&lt;/p&gt;
&lt;p&gt;Flash Source:&amp;nbsp;&lt;a href="http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/"&gt;http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/﻿&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Adobe Creative Cloud Subscription for Business Catalyst Website</title><link>https://www.bloodforge.com/2012/06/adobe-creative-cloud-subscription-for-business-catalyst-website/</link><pubDate>Thu, 21 Jun 2012 00:00:57 +0000</pubDate><guid>https://www.bloodforge.com/2012/06/adobe-creative-cloud-subscription-for-business-catalyst-website/</guid><description>&lt;p&gt;We recently got the Adobe Creative Cloud subscription at work, and I wanted to check out their web hosting plan – one of the features is hosting for up to five websites.&lt;/p&gt;
&lt;h4&gt;Step 1: Creating a Website&lt;/h4&gt;
&lt;p&gt;I’ve never hosted a website with Adobe (or, more specifically, Business Catalyst), so I wasn’t sure where to start.&amp;nbsp; I looked around the website, and eventually found that there are three ways to create a website:&lt;/p&gt;</description></item><item><title>Improving Google Page Speed Score for BlogEngine</title><link>https://www.bloodforge.com/2012/02/improving-google-page-speed-score-for-blogengine/</link><pubDate>Wed, 22 Feb 2012 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2012/02/improving-google-page-speed-score-for-blogengine/</guid><description>&lt;p&gt;I was getting a&amp;nbsp;72/100&amp;nbsp;score from Google Page Speed, so I attempted to improve that a bit.&lt;/p&gt;
&lt;p&gt;I added caching to static resources via the web config, which raised my score by about 10:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;&amp;lt;staticContent&gt;
&amp;lt;clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" /&gt;
&amp;lt;remove fileExtension=".mp4" /&gt;
&amp;lt;remove fileExtension=".gif" /&gt;
&amp;lt;remove fileExtension=".htm" /&gt;
&amp;lt;remove fileExtension=".html" /&gt;
&amp;lt;remove fileExtension=".jpeg" /&gt;
&amp;lt;remove fileExtension=".jpg" /&gt;
&amp;lt;remove fileExtension=".js" /&gt;
&amp;lt;remove fileExtension=".png" /&gt;
&amp;lt;remove fileExtension=".txt" /&gt;
&amp;lt;mimeMap fileExtension=".mp4" mimeType="video/mp4" /&gt;
&amp;lt;mimeMap fileExtension=".gif" mimeType="image/gif" /&gt;
&amp;lt;mimeMap fileExtension=".htm" mimeType="text/html" /&gt;
&amp;lt;mimeMap fileExtension=".html" mimeType="text/html" /&gt;
&amp;lt;mimeMap fileExtension=".jpeg" mimeType="image/jpeg" /&gt;
&amp;lt;mimeMap fileExtension=".jpg" mimeType="image/jpeg" /&gt;
&amp;lt;mimeMap fileExtension=".js" mimeType="application/x-javascript" /&gt;
&amp;lt;mimeMap fileExtension=".png" mimeType="image/png" /&gt;
&amp;lt;mimeMap fileExtension=".txt" mimeType="text/plain" /&gt;
&amp;lt;/staticContent&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;New page score:&amp;nbsp;82/100&lt;/p&gt;</description></item><item><title>Disqus Recent Comments, Top Commenters, and Most Discussed Widget for BlogEngine.NET</title><link>https://www.bloodforge.com/2012/02/disqus-recent-comments-top-commenters-and-most-discussed-widget-for-blogengine-net/</link><pubDate>Tue, 21 Feb 2012 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2012/02/disqus-recent-comments-top-commenters-and-most-discussed-widget-for-blogengine-net/</guid><description>&lt;p&gt;After I switched to Disqus comments, I noticed that my recent comments widget no longer worked.&amp;nbsp;So I wrote a new widget that adds some JavaScript to the web page which includes the recent comments (and a few other options, if desired) when using Disqus.&lt;/p&gt;
&lt;p&gt;The widget is is available on the&amp;nbsp;&lt;a href="http://dnbegallery.org/cms/List/Widgets/DisqusCommentsSummary" target="_blank" rel="noreferrer noopener"&gt;blogengine.net gallery website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Known issues&lt;br&gt;-The character limit when using the combination look doesn&amp;#8217;t seem to be working.&amp;nbsp;I need to look into this more, but right now it seems Disqus is ignoring the character count.&lt;/p&gt;</description></item><item><title>New Comment System</title><link>https://www.bloodforge.com/2012/02/new-comment-system/</link><pubDate>Fri, 17 Feb 2012 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2012/02/new-comment-system/</guid><description>&lt;p&gt;The blog now uses a new comment system &amp;#8211;&amp;nbsp;&lt;a href="http://www.disqus.com/" target="_blank" rel="noreferrer noopener"&gt;Disqus&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I upgraded to BE v2.5, and found various instructions on how to move to Disqus&amp;#8230;&amp;nbsp;&lt;a href="http://surinder.computing-studio.com/post/2011/07/27/BlogEngine-Disqus-Comment-Count-Fix.aspx" target="_blank" rel="noreferrer noopener"&gt;including these&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There was one problem, however. The instructions state that on post.aspx, JavaScript needs to change to the following:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;&amp;lt;script type="text/javascript"&gt;
var disqus_title = '&amp;lt;%=Post.Title %&gt;';
var disqus_identifier = '&amp;lt;%= Post.Id.ToString() %&gt;';
var disqus_url = '&amp;lt;%= Post.AbsoluteLink %&gt;';
var disqus_developer = '&amp;lt;%= BlogEngine.Core.BlogSettings.Instance.DisqusDevMode ? 1 : 0 %&gt;';
(function () {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://&amp;lt;%=BlogEngine.Core.BlogSettings.Instance.DisqusWebsiteName %&gt;.disqus.com/embed.js';
(document.getElementsByTagName('head')&amp;#91;0] || document.getElementsByTagName('body')&amp;#91;0]).appendChild(dsq);
})();
&amp;lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; However, that is not accurate and will result in errors.  The correct code needs to reference Page, and not Post. &lt;/p&gt;</description></item><item><title>Change combobox background color in AS3</title><link>https://www.bloodforge.com/2011/11/change-combobox-background-color-in-as3/</link><pubDate>Tue, 08 Nov 2011 00:00:32 +0000</pubDate><guid>https://www.bloodforge.com/2011/11/change-combobox-background-color-in-as3/</guid><description>&lt;p&gt;I needed to change the background color of the text region of a flash combobox &amp;#8211; using AS3 at runtime.&lt;/p&gt;
&lt;p&gt;Styles for some reason were not working.&amp;nbsp; The solution was to directly address the textfield property and change its background color.&amp;nbsp; Here&amp;#8217;s an example:&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;cbo.textField.textField.background = true;
cbo.textField.textField.backgroundColor = 0xDEDE29;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;</description></item><item><title>Flash Combobox setStyle works in Test (debug) and not in Publish (swf)</title><link>https://www.bloodforge.com/2011/08/flash-combobox-setstyle-works-in-test-debug-and-not-in-publish-swf/</link><pubDate>Thu, 25 Aug 2011 00:00:46 +0000</pubDate><guid>https://www.bloodforge.com/2011/08/flash-combobox-setstyle-works-in-test-debug-and-not-in-publish-swf/</guid><description>&lt;p&gt;I tried to customize the combobox ( AS3 ), and everything was working fine by using cbo.setStyle( &amp;#8220;embedFonts&amp;#8221; ) and cbo.setStyle( &amp;#8220;textFormat&amp;#8221; ) while testing the movie. &amp;nbsp;However, when I published the SWF, the styles were no longer working.&lt;/p&gt;
&lt;p&gt;It seems like setStyle doesn&amp;#8217;t really work properly for comboboxes for some reason. &amp;nbsp;The solution was to apply the setStyle to the textField inside the combobox, and not to the combobox itself.&lt;/p&gt;</description></item><item><title>Change the color of the trendline value in FusionCharts v3 for Flash</title><link>https://www.bloodforge.com/2010/10/change-the-color-of-the-trendline-value-in-fusioncharts-v3-for-flash/</link><pubDate>Tue, 12 Oct 2010 00:00:01 +0000</pubDate><guid>https://www.bloodforge.com/2010/10/change-the-color-of-the-trendline-value-in-fusioncharts-v3-for-flash/</guid><description>&lt;p&gt;It seems like FusionCharts does not support changing the color of a trendline via the TRENDVALUES style application.&amp;nbsp; The color always seems to default to the color of the trendline.&lt;/p&gt;
&lt;p&gt;The fix to this issue involves modifying the source of the XYPlotChart.as file (you’ll need the source for fusioncharts to be able to do this).&lt;/p&gt;
&lt;p&gt;Search the file for the following line (it should be line 1789):&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;trendFontObj.color = this.trendLines &amp;#91;i].color;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; Right afer this line, paste the following code: &lt;/p&gt;</description></item><item><title>How To Make the ActionScript 3.0 (AS3) TextArea Not Selectable</title><link>https://www.bloodforge.com/2010/09/how-to-make-the-actionscript-3-0-as3-textarea-not-selectable/</link><pubDate>Sat, 18 Sep 2010 00:00:56 +0000</pubDate><guid>https://www.bloodforge.com/2010/09/how-to-make-the-actionscript-3-0-as3-textarea-not-selectable/</guid><description>&lt;p&gt;Here’s something I wasted like 45 minutes on, and it should be pretty trivial. I needed to make the TextArea component NOT selectable, yet still enabled (need the scrollbar to work).&lt;/p&gt;
&lt;p&gt;I started digging around the TextArea.as class, because no matter what I did in my code (such as myTextArea.textField.selectable = false; ), the TextArea was still selectable. It appears that when the TextArea calls the draw() or setSize() methods, it updates the text field in the TextArea to be selectable depending on whether the TextArea is enabled or not.&lt;/p&gt;</description></item><item><title/><link>https://www.bloodforge.com/2010/03/77/</link><pubDate>Tue, 16 Mar 2010 00:00:44 +0000</pubDate><guid>https://www.bloodforge.com/2010/03/77/</guid><description>&lt;p&gt; I downloaded the platform preview version of IE9 today to test out some CSS support. I ran a few tests through it, with the following results.  The picture on the left was generated using Firefox 3.6 (keep in mind that I did have to use the “-moz” prefix in front of all but one style to make it work in FF). The IE content is on the right. &lt;/p&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img loading="lazy" width="400" height="220" src="https://www.bloodforge.com/wp-content/uploads/2020/02/ie9css1.gif" alt="" class="wp-image-78"/&gt;&lt;/figure&gt;
&lt;p&gt;It certainly is possible that IE requires some vendor-specific suffix like Firefox did. However, I did not use any prefix, so the style may actually be supported in some form.&lt;/p&gt;</description></item><item><title>HTML5 or Flash – Be careful what you ask for…</title><link>https://www.bloodforge.com/2010/03/html5-or-flash-be-careful-what-you-ask-for/</link><pubDate>Tue, 09 Mar 2010 00:00:06 +0000</pubDate><guid>https://www.bloodforge.com/2010/03/html5-or-flash-be-careful-what-you-ask-for/</guid><description>&lt;p&gt;Ok, I’ll get straight to the point: There is a lot to dislike about many websites right now when it comes to how these websites generate revenue. On many sites it is hard to actually find the content you were seeking due to the huge amount of ads that get displayed. I’ve had my browser crash countless times due to poorly designed ads (generally, it is due to Flash ads, but it certainly can happen with JavaScript as well).&lt;/p&gt;</description></item><item><title>New Theme for Bloodforge</title><link>https://www.bloodforge.com/2010/03/new-theme-for-bloodforge/</link><pubDate>Sun, 07 Mar 2010 01:00:19 +0000</pubDate><guid>https://www.bloodforge.com/2010/03/new-theme-for-bloodforge/</guid><description>&lt;p&gt;I updated the look of the site so it doesn’t look like the default BlogEngine.NET theme. I’m not a graphic designer, but I think it could have turned out worse. It does look best in the latest version of Opera/Firefox (and probably Chrome and Safari…).&lt;/p&gt;
&lt;p&gt;Hopefully IE will have support for border-radius and box-shadow soon… I’m not holding my breath though.&lt;/p&gt;</description></item><item><title>Updated Contact Page – Now with a reCaptcha</title><link>https://www.bloodforge.com/2010/03/updated-contact-page-now-with-a-recaptcha/</link><pubDate>Sun, 07 Mar 2010 00:00:42 +0000</pubDate><guid>https://www.bloodforge.com/2010/03/updated-contact-page-now-with-a-recaptcha/</guid><description>&lt;p&gt;&lt;em&gt;This post is here for archival purposes only. The linked items are no longer available.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I’ve added the reCaptcha to my contact page.  If anyone who has installed the reCaptcha wants to add it to their contact page, the files are available here.&lt;/p&gt;
&lt;p&gt;These are just the updated contact page files.&amp;nbsp; You must have the reCaptcha already installed for these to work.&lt;/p&gt;</description></item><item><title>New and Improved Comment System for BlogEngine.NET</title><link>https://www.bloodforge.com/2010/03/new-and-improved-comment-system-for-blogengine-net/</link><pubDate>Tue, 02 Mar 2010 00:00:02 +0000</pubDate><guid>https://www.bloodforge.com/2010/03/new-and-improved-comment-system-for-blogengine-net/</guid><description>&lt;p&gt;&lt;strong&gt;Update: When I switched hosting providers and upgraded BE.NET, I didn&amp;#8217;t migrate the changes to the comment system to the newer version. &amp;nbsp;This post describes my updates to version 1.x, but is no longer being used on my website.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;BlogEngine.NET had a pretty decent commenting system, but it lacked some of the functionality I wanted in a comment system for my blog. So I decided to update it myself, which turned out to be a bigger deal than I thought it would be. Still, after a few evenings of work, I got my comment system. The following is a summary of the new additions.&lt;/p&gt;</description></item><item><title>Blogengine.NET – reCaptcha 0.93 Installation Instructions</title><link>https://www.bloodforge.com/2010/02/blogengine-net-recaptcha-0-93-installation-instructions/</link><pubDate>Fri, 26 Feb 2010 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2010/02/blogengine-net-recaptcha-0-93-installation-instructions/</guid><description>&lt;p&gt;&lt;em&gt;EDIT: These post exists for archival purposes only. The linked files are no longer available.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;These installation instructions now apply to version 0.95&lt;/p&gt;
&lt;p&gt;First, the linked ZIP file contains the updated files for installing the Recaptcha control.&lt;/p&gt;
&lt;h4&gt;UPDATES:&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;Version 0.95 – Changed initial loading method to fix error that occurred in certain cases in IE. If upgrading from 0.94, you only need to replace the Recaptcha.cs file.&lt;/li&gt;&lt;li&gt;Version 0.94 – Logging fixes&lt;/li&gt;&lt;li&gt;Version 0.93 – Added logging.&lt;/li&gt;&lt;li&gt;Version 0.92 &amp;#8211; The recaptcha will no longer get focus after it has been loaded. Install procedure is unchanged from version 0.91.&lt;/li&gt;&lt;li&gt;Version 0.91 &amp;#8211; Changed the way that Recaptcha is verified.&amp;nbsp; It should no longer be possible to bypass the recaptcha by manually executing JavaScript on the page.&lt;/li&gt;&lt;li&gt;Version 0.9 &amp;#8211; Initial Version&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Quick Installation&lt;/h4&gt;
&lt;p&gt;First, back up your files in case you need to revert for any reason. If you have not modified any of the BlogEngine files, you can extract the ZIP linked to above and place all of the files into their proper locations ( the unzipped files should contain a folder structure ). There is no need to recompile.&lt;/p&gt;</description></item><item><title>Looking back… Bloodforge several years ago</title><link>https://www.bloodforge.com/2010/02/looking-back-bloodforge-several-years-ago/</link><pubDate>Wed, 24 Feb 2010 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2010/02/looking-back-bloodforge-several-years-ago/</guid><description>&lt;p&gt;I’ve known about the &lt;a href="http://www.archive.org/"&gt;Wayback Machine&lt;/a&gt; for a while, but for some reason, I never visited the site – until today. It was such a strange feeling seeing what &lt;a href="http://web.archive.org/web/*/http://www.bloodforge.com"&gt;Bloodforge looked like&lt;/a&gt; back in 2001, and being able to see how it progressed over the years (the site was up since 1999 actually, but there is no record of that in the archive).&lt;/p&gt;
&lt;p&gt;I’ve actually pulled up some items from the archive. One of those is the logo that you can see at the top-left of the page.&lt;/p&gt;</description></item><item><title>Blogengine.NET Recaptcha 0.91 Installation Instructions</title><link>https://www.bloodforge.com/2010/02/blogengine-net-recaptcha-0-91-installation-instructions/</link><pubDate>Sun, 21 Feb 2010 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2010/02/blogengine-net-recaptcha-0-91-installation-instructions/</guid><description>&lt;p&gt;&lt;strong&gt;NOTE: THESE INSTALLATION INSTRUCTIONS HAVE BEEN UPDATED:&lt;/strong&gt; To get the latest version, follow the instructions located at: &lt;em&gt;&lt;strong&gt;NO LONGER AVAILABLE&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;First, the linked ZIP file contains the updated files for installing the Recaptcha control.&lt;/p&gt;
&lt;p&gt;UPDATES:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Version 0.92 &amp;#8211; The recaptcha will no longer get focus after it has been loaded. Install procedure is unchanged from version 0.91.&lt;/li&gt;&lt;li&gt;Version 0.91 &amp;#8211; Changed the way that Recaptcha is verified.&amp;nbsp; It should no longer be possible to bypass the recaptcha by manually executing JavaScript on the page.&lt;/li&gt;&lt;li&gt;Version 0.9 &amp;#8211; Initial Version&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Quick Installation&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Async Recaptcha for BlogEngine.NET 1.6</title><link>https://www.bloodforge.com/2010/02/async-recaptcha-for-blogengine-net-1-6/</link><pubDate>Sat, 20 Feb 2010 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2010/02/async-recaptcha-for-blogengine-net-1-6/</guid><description>&lt;p&gt;&lt;strong&gt;The instructions on this page are no longer valid for the latest version.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I really am getting sick of the spam that is appearing on this blog, so yesterday I decided to implement Recaptcha for BlogEngine.NET. I had three main goals:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Easy to implement – as any control, it needs to be pretty trivial to add it to an existing blog instance&lt;/li&gt;&lt;li&gt;Configurable via the Extensions panel – I really like what BlogEngine has done with their ability to edit extensions, so I wanted the control to be configurable in this way&lt;/li&gt;&lt;li&gt;It had to be asynchronous – when a user posts a comment, I don’t want the whole page to refresh&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The final solution is pretty close to what I had in mind.&amp;nbsp; The extension is a single file that needs to be inserted into the ‘/App_Code/Controls’ folder.&amp;nbsp; In addition, two lines of code need to be added/modified in the ‘/User controls/CommentView.ascx’ file.&lt;/p&gt;</description></item><item><title>Disabling Comments for Blacklisted IP addresses</title><link>https://www.bloodforge.com/2010/02/disabling-comments-for-blacklisted-ip-addresses/</link><pubDate>Thu, 18 Feb 2010 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2010/02/disabling-comments-for-blacklisted-ip-addresses/</guid><description>&lt;p&gt;I was reading through the discussions on Codeplex for Blogengine.NET, and a user (ALBsharah) had an interesting idea for controlling spam: if we can already determine that a user is blacklisted based on the IP, do not even give them the ability to post new comments.&amp;nbsp; The thread is available&amp;nbsp;&lt;a href="http://blogengine.codeplex.com/Thread/View.aspx?ThreadId=85678"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Making this change to BE is relatively simple.&amp;nbsp; The first change was actually creating a function which would return whether the user is blacklisted.&amp;nbsp; Comment moderation methods seem to be located in the CommentHandlers.as file in the BlogEngine.Core project. All of this code was actually already written in another method ( ModeratedByRule ), I just needed to extract that code out of that method, and modify that method to use the new code – I hate having code that does the same thing in two different places.&amp;nbsp; So, where before the function looked like the following:&lt;/p&gt;</description></item><item><title>Flexible AutoComplete (Suggested Words) Code for Text Input Fields using JavaScript</title><link>https://www.bloodforge.com/2008/11/flexible-autocomplete-suggested-words-code-for-text-input-fields-using-javascript/</link><pubDate>Fri, 14 Nov 2008 00:00:11 +0000</pubDate><guid>https://www.bloodforge.com/2008/11/flexible-autocomplete-suggested-words-code-for-text-input-fields-using-javascript/</guid><description>&lt;p&gt;&lt;em&gt;This post was written a long time ago, and since then many other great solutions have come out to accomplish this task. I have kept my post for historical reasons, but the files are no longer available and the code on the page is no longer functional.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As I&amp;#8217;m sure you&amp;#8217;ve seen on many websites, displaying suggestions while a user types text into a text field has become quite popular. However, I was rather disappointed with the solutions I&amp;#8217;ve found out there. The solutions I&amp;#8217;ve found had any combination of the following problems:&lt;/p&gt;</description></item><item><title>C# Priority Queue Implementation for Silverlight</title><link>https://www.bloodforge.com/2008/10/c-priority-queue-implementation-for-silverlight/</link><pubDate>Mon, 20 Oct 2008 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2008/10/c-priority-queue-implementation-for-silverlight/</guid><description>&lt;p&gt;While writing some code for Silverlight, I realized that Silverlight does not include a PriorityQueue implementation in their libraries.&amp;nbsp; I searched around, but I couldn&amp;#8217;t find any code that I thought was decent, so I wrote up something pretty quick.&amp;nbsp; I&amp;#8217;ll be testing this some more in the near future, but for now, I think it has the basics.&amp;nbsp; This should be fairly quick for large collections, as the enqueue is logarithmic, while the dequeue is pretty much as fast as it can be.&lt;/p&gt;</description></item><item><title>Very nice and flexible file upload control with progress</title><link>https://www.bloodforge.com/2008/10/very-nice-and-flexible-file-upload-control-with-progress/</link><pubDate>Sat, 18 Oct 2008 00:00:10 +0000</pubDate><guid>https://www.bloodforge.com/2008/10/very-nice-and-flexible-file-upload-control-with-progress/</guid><description>&lt;p&gt;I needed a pretty quick way of displaying file upload progress in a ASP.NET project.&amp;nbsp;In the past while working for a different employer, I&amp;#8217;ve written my own code from scratch, and it was a complete pain in the ass.&amp;nbsp; Fortunately, after doing a bit of searching, I&amp;#8217;ve ran across an open source control that works great.&amp;nbsp; The control is called NeatUpload and can be found at this URL:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.brettle.com/neatupload"&gt;http://www.brettle.com/neatupload&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Server Side Includes (SSI) adding a blank/empty line to HTML page</title><link>https://www.bloodforge.com/2008/08/server-side-includes-ssi-adding-a-blank-empty-line-to-html-page/</link><pubDate>Thu, 28 Aug 2008 00:00:13 +0000</pubDate><guid>https://www.bloodforge.com/2008/08/server-side-includes-ssi-adding-a-blank-empty-line-to-html-page/</guid><description>&lt;p&gt;While creating a page that used server side includes, I ran into some very strange behavior.&amp;nbsp; Right before each SSI, a blank line would appear on the page.&amp;nbsp; It didn&amp;#8217;t have anything to do with margins or padding.&amp;nbsp; It was just like an empty line appeared right out of nowhere, messing up the layout.&amp;nbsp; First, I thought it was some problem with IIS and SSI, but I couldn&amp;#8217;t find anything there.&lt;/p&gt;</description></item><item><title>Using LoadVars sendAndLoad instead of WebService when calling web services with Flash ActionScript</title><link>https://www.bloodforge.com/2008/08/using-loadvars-sendandload-instead-of-webservice-when-calling-web-services-with-flash-actionscript/</link><pubDate>Thu, 14 Aug 2008 00:00:19 +0000</pubDate><guid>https://www.bloodforge.com/2008/08/using-loadvars-sendandload-instead-of-webservice-when-calling-web-services-with-flash-actionscript/</guid><description>&lt;p&gt;I&amp;#8217;ve ran into issues using the WebService object in Flash.&amp;nbsp; The thing is incredibly buggy.&amp;nbsp; In certain cases, it works just fine, but in other cases, it flat out does not work. In my last case, the web service loaded perfectly fine (onLoad was called), but the PendingCall would not return anything.&amp;nbsp; The onFault method was never called after I invoked my web service call, but the web service never returned either.&amp;nbsp; Examining the outgoing messages from Flash (using HTTP headers in Firefox)&amp;nbsp;revealed that Flash was never even attempting to call the web service.&amp;nbsp; Flash did correctly acquire the crossdomain.xml file (which allowed access from all domains), and it did load the WSDL.&amp;nbsp; But, for whatever reason, it did not call the web method like it was supposed to.&lt;/p&gt;</description></item><item><title>IE8 and AjaxControlToolkit – Visibility bug</title><link>https://www.bloodforge.com/2008/06/ie8-and-ajaxcontroltoolkit-visibility-bug/</link><pubDate>Wed, 18 Jun 2008 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2008/06/ie8-and-ajaxcontroltoolkit-visibility-bug/</guid><description>&lt;p&gt;Well, I finally downloaded IE8 to see how some of the sites I&amp;#8217;ve worked on behave.&amp;nbsp; Most things work just fine, however, I did find a pretty significant problem with the AjaxControlToolkit.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been using the Tab control quite a bit, and I noticed that, when switching between tabs, the new tab was not showing up.&amp;nbsp; The old tab was hiding, though&amp;#8230;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Debugging has led me to the setVisible method located in &amp;#8220;Common/Common.js&amp;#8221; in the AjaxControlToolkit.&amp;nbsp; Specifically, the problem existed in the following code:&lt;/p&gt;</description></item><item><title>Using JavaScript methods in C#</title><link>https://www.bloodforge.com/2008/06/using-javascript-methods-in-c/</link><pubDate>Wed, 04 Jun 2008 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2008/06/using-javascript-methods-in-c/</guid><description>&lt;p&gt;I ran into a weird problem today.&amp;nbsp; I needed to escape a string in c# in such a way as to be able to unescape() it later with JavaScript into the original string.&amp;nbsp; JavaScript has an escape() method that is able to do this, but since I&amp;#8217;m writing the code in C#, I can&amp;#8217;t really access that method.&amp;nbsp; At first, I looked into HttpServerUtility.UrlEncode() and the HttpServerUtility.HtmlEncode() methods, but those are not equivalent to JavaScript&amp;#8217;s escape() method.&amp;nbsp;&lt;/p&gt;</description></item><item><title>Microsoft JScript runtime error: ‘null’ is null or not an object</title><link>https://www.bloodforge.com/2008/05/microsoft-jscript-runtime-error-null-is-null-or-not-an-object/</link><pubDate>Wed, 28 May 2008 00:00:49 +0000</pubDate><guid>https://www.bloodforge.com/2008/05/microsoft-jscript-runtime-error-null-is-null-or-not-an-object/</guid><description>&lt;p&gt; Programming JavaScript can be fun, but sometimes when I get errors like this it can get a little frustrating&amp;#8230; &lt;/p&gt;
&lt;figure class="wp-block-image size-large"&gt;&lt;img loading="lazy" width="527" height="235" src="https://www.bloodforge.com/wp-content/uploads/2020/02/jserror.jpg" alt="" class="wp-image-24" srcset="https://www.bloodforge.com/wp-content/uploads/2020/02/jserror.jpg 527w, https://www.bloodforge.com/wp-content/uploads/2020/02/jserror-300x134.jpg 300w" sizes="(max-width: 527px) 100vw, 527px" /&gt;&lt;/figure&gt;
&lt;p&gt; It happened on the following line, where the variable &amp;#8216;o&amp;#8217; was null: &lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;o.onmousedown = Drag.start;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;</description></item><item><title>Flash standalone installer for internet explorer (IE MSI)</title><link>https://www.bloodforge.com/2008/05/flash-standalone-installer-for-internet-explorer-ie-msi/</link><pubDate>Tue, 20 May 2008 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2008/05/flash-standalone-installer-for-internet-explorer-ie-msi/</guid><description>&lt;p&gt;I&amp;#8217;m not sure why Adobe makes it so hard to install the flash player with a MSI.&amp;nbsp; By going to adobe.com and clicking on the &amp;#8220;Get Flash Player&amp;#8221; link, it will direct you to a page that automatically will attempt to install Flash in IE.&amp;nbsp; I needed a MSI because I needed to install Flash on a machine with restricted internet access.&amp;nbsp; Fortunately, even though they don&amp;#8217;t advertise it, you can get a standalone installer for IE as well&amp;#8230;&lt;/p&gt;</description></item><item><title>‘AjaxControlToolkit’ is undefined (javascript)</title><link>https://www.bloodforge.com/2008/05/ajaxcontroltoolkit-is-undefined-javascript/</link><pubDate>Thu, 08 May 2008 00:00:00 +0000</pubDate><guid>https://www.bloodforge.com/2008/05/ajaxcontroltoolkit-is-undefined-javascript/</guid><description>&lt;p&gt;I got this annoying error recently in a website I&amp;#8217;ve been working on.&amp;nbsp; It worked perfectly fine locally, it worked fine after uploading to the web server on my machine and other machines in the lab (various browsers).&amp;nbsp; Then, it turns out, it doesn&amp;#8217;t work on (one of) the client&amp;#8217;s machines.&amp;nbsp; Of course, I&amp;#8217;m unable to replicate the error locally.&lt;/p&gt;
&lt;p&gt;I looked around and it seems the first solution was to clear the cache.&amp;nbsp; A lot of people said that Ctrl+F5 works, others said they needed to manually clear the cache and then restart the browser.&amp;nbsp; Well, neither of those worked.&lt;/p&gt;</description></item></channel></rss>