SharpMT and Pocket SharpMT 2.1 Official Release

This marks the official release of the 2.1 version of SharpMT and Pocket SharpMT. The feature list and download links follow…

Download: SharpMT 2.1

Read: SharpMT FAQ

Screenshots: 1 | 2 | 3

Download: Pocket SharpMT 2.1 (ZIP) | ARM

Read: Pocket SharpMT FAQ

Screenshots: 1 | 2 | 3

New Features – SharpMT and Pocket SharpMT

Insert Image Link for Uploaded Images – This was a suggestion: since you are uploading an image to your blog, why not have SharpMT automatically insert an image link to point to it? On the Options dialog, under the new Tags tab, you’ll find a new custom tag called Image. When you go to upload an image, you will see a new check box that says Insert IMG tag with this link as SRC on the upload dialog. These are obviously intertwined. Unless I explain this with an example it will sound ugly: if <img src=”[IMAGELINK]” border=”0″> is the current Image tag, the when it is inserted into an edit box it will replace [IMAGELINK] with the uploaded picture’s link. You could also change the Image tag to something like <a href=”[IMAGELINK]” target=”_blank”><img src=”[IMAGELINK]” border=”0″></a> to get fancy. Also, if the check box on the upload dialog is disabled you didn’t have focus on an “available” edit box when you uploaded the image.

Custom Tags – On a related tags note, you can now set three different customizable tags. They are activated as Ctrl+1, Ctrl+2, and Ctrl+3 and will only be active if there is a tag set (obviously). SharpMT ships with 1 set as strike, 2 as p, and 3 is empty. When you set the tag, you can set the tag to be “Enclosing” or “Contained”: strike acts like bold would so it is Enclosing – p acts like br or hr so it is Contained. Confused? Watch the test for the check boxes and you’ll see a simple preview of how your tag will be displayed. Also, the shortcut for these items on the menu show up a Ctrl+D1 instead of Ctrl+1 – nothing I can do for that but Ctrl+1 works just fine so I’m happy. Pocket SharpMT supports two custom tags, instead of three

New Draft-Level Default – For new drafts there is a new default setting for the “Authored On” setting. As a default it can either be “Server Time” (meaning that you uploaded post will be assigned the date and time by the MT server) or non-Server Time. If non-Server Time, the date and time for Authored On will default to the time that SharpMT created the draft and can be edited before posting to the server.

ALT tag support – I added a new text box on the Upload Image dialog for ALT tag support. Adding the edit box was easy enough, but this kicked open a couple of other things, so I’m deeming this feature closed (unless someone comes up with some dire need and something cool!) What happens is that the Image Link (on the Options dialog) can now have a [ALTTAG] placeholder that acts like the [IMAGELINK] placeholder: when the link is inserted, whatever is in the ALT edit box goes here.

New features – SharpMT specific

Spell Checking – What’s the in-line spell checking? This is the red underline that appears for misspelled words when you pause while typing. Type asdasdad, stop typing, and you’ll see a line appear. To get suggested spellings, right click over the underlined word and select an option. What’s the manual spell checking? Click the ABC button on the toolbar, select Spell Check on the menu, or press F7. This will check the Title, Body, Extended Entry, and Excerpt fields (on this draft only!) for spelling errors – if you cancel out of checking one field, the remaining fields are still checked, until you’re told the process is complete. The Spell Checking options dialog (on the Tools menu) is pretty neat, actually – it comes built in with the control. If you have a slower machine, you can turn off in-line spell checking here, along with some other word-ignore settings; this is the window into the user-defined dictionary as well. To keep the install size down, SharpMT only includes the US English directory – for Canadian or UK English dictionaries, download both here and follow the install instructions in the included Read Me.

Updated Interface – By popular demand, there’s some added features to the general UI of the Main tab: resizing boxes to make more room. The Title/Category and Excerpt sections can not be “Minimized” and “Restored”. There is also a splitter control between the Body and Extended sections: move the splitter to resize the controls accordingly. These two don’t get a minimize option as they share the same space but you can hide one almost entirely by using the splitter. Also, the settings of these sizes and positions are captured with the closing of each Draft; the last most saved settings will be used for the next draft created/opened. This works well if you like one set layout: set it up, close the draft and never change it again (because you won’t have to).

Links Window – If you do a refresh on your links (or as you add new links) you will begin to see blog entry’s date and time (as it stored in on the server) in the Blog Links’ details window.

Clickable Blog Link Columns – Columns? Yes, there’s two now. One for title and one for the server based ID. Before anyone asks, no, I cannot put category in there. Why? Because the call I have for Blog Links doesn’t include categories as part of the call. Yes, it would be a nice to have – maybe future XML-RPC calls will support it, but this one does not. So there’s sorting in either order by either title or by ID. The initial default is descending order by ID (yes, numerically, since they are number based) and that’s how they were sorted. The same is true of the Blog Links tab of the Insert Link window. Each has separate settings, so you sort them differently between the windows.

MRU Listing – Seeing as I’ve never gotten used to the “new” multiple draft open dialog, I had to do something new to see a list of the last few drafts I had worked on: enter the MRU. On the file menu, you will find a list of the most recently saved or opened drafts. It won’t crash if it’s blank – it can grow to 8 deep. If you try to open more than 8 at a time, the 8 most recent will get onto the list and the rest are ignored. Closing drafts has no impact on the list: it’s only changed for opens and saves. Also, it will only show the draft file name if the file is stored in the “Draft directory”. If the draft was opened from another directory or from a network path, the entire path will be shown.

Thanks to all the users that have been helping test the beta version, suggesting features, and donating money to make both SharpMT and Pocket SharpMT the useful applications they both have become!

Donation things:

Donations for SharpMT via Amazon!

57 thoughts on “SharpMT and Pocket SharpMT 2.1 Official Release”

  1. Congratulations on the new release — the new features are welcome. One minor thing I meant to suggest earlier: when selecting text for link creation within an entry, I use the “double-click-and-drag” method with the mouse. In the MTSharp editor, this causes the trailing space of the string to be highlighted as well as the text, resulting in that space being included in the link. One of those small but irritating usability issues.

  2. @Mike – thanks! For a while I had wondered if I left comments off by mistake – quietest release so far which usually means either ppl aren’t using it or there’s no isses with it. Both are sorta scary.

    Anyway, thanks for the feedback – I’ll take a peek and see if that’s possible… I’ve left the edit box “as if” meaning that it’s pretty stock…

  3. Hi Randy – nice little program.. I’m pretty close to deciding to use it fulltime and donating to your Paypal account, but one thing is stopping me – I post to multiple blogs *on multiple servers* – would it be really hard to add that as an option in the setup?

    Thanks, and once again, great program

  4. @Sebastian – Thanks for the interest! And actually, yes, it’s a pretty large and “dangerous” effort. This is also a kludgy workaround that I’ve posted betweens the comments of the betas of this release, if you want to check into that… HTH!

  5. Hey, thanks for writing SharpMT, it’s a great program, and it’s certainly better than typing into those textboxes. There are a couple of problems with it, though:

    * When I post my entry to the blog, none of my pings get sent. Which would normally be easy to work around, but…

    * For some reason, the new entries always get marked as “publish”, even if I select “draft” on the “advanced” tab. This means that I need to change them to “draft” and then back to “publish” using MT’s web UI… not insurmountable but annoying.

    * The “preview” tab doesn’t respect the “convert line breaks” setting. I know that implementing a generic preview tab that works with every text filter out there is tough, but maybe a special case for “convert line breaks” wouldn’t be so bad ?..

    * The spellchecker spell-checks everything, including the HTML tags, URLs, image filenames, etc. Thus, the signal-to-noise ratio gets pretty low.

    Anyway, these are minor issues, but they can still be annoying…

  6. @Bugmaster – Glad it’s working out for ya, for the most part… with regards to the comments, pings are iffy things. I’ve had issues with them myself, but it seems to be the MT implimentation of pings – I send them in the same way, all the time, and sometimes they work; sometimes they don’t. You might want to check your blog’s activity log – if they timed out it wil be in that log, but again, this is beyond my control.

    As to the publish, that’s a known issue with an MT-internal configuration – the FAQ has instructions on that but I’ve heard that after 2.63 even that doesn’t work anymore, so even that is iffy.

    Preview is exactly that: a generic HTML view and of course the “Convert Line Breaks” is an MT-server based change; I will look into adding a “special” case for local files.

    And the spell checker… that’s a completely extrnal control, so the most I can do there is make a request for an “ignore HTML” feature from them… I know they are actively working on the control but they mentioned that they were thinking of adding RichTextEdit support back in early 03 – I asked them about it a couple of weeks ago and I was the first to ever have asked. So they do work on the control, but I don’t know how open they’d be to this type of feature.


  7. Actually, I just took a look at the Preview mode – I already DO convert the line breaks, provided that the draft was saved with “Convert Line Breaks” as the selected filter. (I thought this sounded familiar)

  8. This may have already been implemented a long time ago and my memory is failing (wouldn’t surprise me after the few months I’ve had…) but if not: what about letting the user specify a CSS in the options that the Preview mode would utilize?

  9. I don’t think we addressed it, per se, but it should be supported: the previewHtml.htm file is loaded to fill in the Preview window – if you put in a link to a CSS file it will be reflected there. In fact, the default has a bunch of CSS tags in there already in a style tag. At least it should work. I think it would work.

    Don’t worry about repeat requests, too – this project has grown to the point to where *I* can’t remember everything that’s in there! When I look into stuff I end up saying “oh, that’s there already” and leave it alone.

  10. Yeah, that I know about. Or at least I think I did. I thought I had some “graceful” way around that… maybe not. Too much code!

  11. > I already DO convert the line breaks, provided that the draft was saved with “Convert Line Breaks” as the selected filter.

    Uh… in that case it’s not working. Here is what I did:

    1). Create a new, blank entry.

    2). Click the “advanced” tab and choose “convert line breaks”.

    3). Click the main tab again, and type “a (enter)(enter) b (enter)(enter) c (enter)(enter)” In the textbox it looks like this:




    4). Save the document

    5). Click the “Preview” tab. It looks like this: “a b c”.

    Is there some trick to this ? Or what ?

  12. Oops found another little “gotcha.”

    I’d suggest disabling the “Spellcheck” button and menu entry if no post is active. If #MT as a whole is “blank” (ie. load #MT then click the mini-‘x’ button) clicking the spellcheck generates an ‘unhandled exception.’ So far, #MT has been able to continue unphased, however, so that’s a good thing.

    Also, I did try editing the previewHtml.htm file to no avail. I was making the assumption that #MT simply uses an IE control for the HTML rendering? Regardless, it did not seem too interested in reading a .css file. No big deal though.

  13. @Bug – I just tried this with the Extended Entry field (I hide the “Entry Body” in my preview) and it showed up OK… are you trying this with the Entry Body field? There might be a bug there.

    @Scott – Aaaaaah, crap. Ya know? I already had a bug come in for Beta 6, where it crashed if Upload Image was clicked… I shoulda caught this but didn’t… something for 2.1.1, maybe. As for the Preview, yes, it does use an IE control… odd that it didn’t pick it up, too. Very odd. I figured it would pick it up like the style tag was.

  14. Huh… I tried it with both “Entry Body” and “Extended Entry”, same broken result. Is there some registry setting I need to change, or something like that ?

  15. Nope. I installed it from scratch and it worked OK here… not sure what might be up between the machines – anyone else here seen this problem?

  16. @Bill – Actually, I don’t think there is on either side. There might be a PeRL or webserver setting on the server side, but that’s more of an MT question (and one I haven’t encountered before). Otherwise, #MT uses the standard .NET access methods with all the defaults so if there’s a time out option, I haven’t tweaked it yet…

  17. Taking MT Editors Offline

    At this writing, I manage a Movable Type installation (or try to) comprised of 3 full blogs and a pair of sideblogs. Four of these are (or will be) fairly active and in a single writing session I may post…

  18. Randy: lol yeah it’s always designing an idiot-proof UI that’s such a pita with programming, eh? :)

    It’s nearly impossible too: those idiots are damned ingenious!

  19. @Scott – Especially without a QA team behind ya running “every” possible click-pattern… I hit the obvious but sometimes there’s just so many obvious things… after all the Spell check button has been in use for months by me but ONLY me – for everyone else it’s a first run… joy!

  20. @Trackback – Dude, like eight times I’ve either posted on here or talked about the problems with multiple blog support and that it wasn’t supported by #MT, yet you still tested #MT in a test bed that required multiple-blog support. Not quite sure what that accomplishes, but it’s obvious that it’s not going to pass a test that requires features that aren’t supported. Also, as per many comments/feedback, the pings are well beyond *MY* control. I send them to MT the same way everytime – check the log file for proof of that – and yet sometimes MT sends them on properly… not much I can do for that.

    As to the rest of the comments, I’ll consider them for future releases, but I am reasonably certain the multiple blog support will not be done. Also, I’m not sure I get what saving existing posts would accomplish – the whole point of editing published posts is that you’re online to get a copy of the post, especially in multi-author MT environments…

    I can tell ya this much – if you have such serious need for multiple servers with real-time and offline posting capabilities, you might want to go with a commercial product like CityDesk or Exchange or something… after all, the three reviewed products are freeware :)

  21. Actually, I would like to be able to save a local .smt copy of any entries that I’d made online using MT itself too.

    I’ve already had one server crash where I couldn’t run MT to back backups so all I had were my #MT .smt’s to use for restoration.

  22. Yeah, but the problem with that is that #MT doesn’t get enough information to truly back up a server… things like comments, trackbacks, etc… those all come out of the MT-based export and goes back into the MT-based import. I mean I once lost my MT server but I was much better off going with the import function rather than reposting them – that way the inter-blog-post links all stayed working…

  23. Ok, I reinstalled SharpMT from scratch, still no luck with the “Convert Line Breaks” feature. I am kind of at a loss at what to do next… Is there some debug info I can send in ? A log or some registry keys or something…

  24. Um, no – there’s no setting, per se… alls I know is that when I have “None” selected it doesn’t convert the blank lines in my Draft and when I have it set to “Convert Line Breaks” it works. There’s no registry setting, no fucky hidden key… are you running with any funky text filters in the list maybe?

  25. Ah, actually yes: I also have Textile in my list, because I have it installed on the blog. However, I never actually use it with SharpMT. Is there some sort of an off-by-one error due to an extra filter ?

    Inicidentally, and totally offtopic: I really appreciate the fact that I can post some sort of an inane bug report, and get an instant answer from the guy who writes the code. If only commercial software worked this way… sigh…

  26. Actually yeah, it looks like an off-by-one error. When I set the text filter to “Textile”, the line breaks get converted correctly; my “Filter” combo box looks like this:



    Convert Line Breaks

    Is SharpMT using some integer index of the filter, as opposed to comparing its name as a string ?

  27. Probably – THAT I didn’t think to check… lemme look into that. The convert break bit mighta been done long before I added that support; also I don’t have multiple filters and had to rely on the users for it :) I’ll check it out.

  28. Hey Randy,

    I’d be that @Trackback dude.

    Yeah, that article doesn’t make clear how impressed I am generally with #MT. The most recent upgrades built strength on strength.

    I’m not expecting to see a spooler anytime soon. However, I can work around most offline and multi-blogging issues if the following three relatively minor features were implemented in #MT:

    1> Allow saving edited entries to local disk.

    2> Save the blog ID and category IDs in the draft or edited entry file on local disk.

    3> Allow changing the current blog when offline; store the categories for all subscribed blogs (ala Zempt).

    Although I have by no means exhaustively perused the voluminous comments on randyrants, I’ve grazed a fair bit. Just haven’t run into any commentary re: implementing multi-blogging support. (If you provide some links, I’d be happy to post them to my blog.)

    With my DELL notebook, I multi-blog several single-author blogs hosted on a single shared server account. My financial resources are limited (another 3.5 years of payments on the notebook); $300 software’s not on the radar.

    That’s the reality of my working environment, not a cruel and unusally punishing testbed intended to batter and bruise software beyond it’s intended implementation. #MT is the best tool I can afford. Judging from the burgeoning variety of blogs, I imagine I’m not entirely alone in all or some of these environmental factors.

    I’ve been giving the best of the freeware editors a long, hard workout and, understandably, they don’t quite meet my needs. They weren’t designed to. Which got me to thinking: what would it take to create a kick-ass offline tool for a single-author offline multi-blogger like me? So I wrote it up.

    A guy can dream, can’t he?

    RE: Ping failure– I am not the only person on the web to observe, anecdotally, that Zempt, for example, appears to ping more faithfully than #MT. Our observations may or may not be accurate.

    RE: Saving edited posts– When I travel, connect time is generally expensive and intermittent. I go in. I load up/down. I get out. I may be offline for days. Additionally, I *like* to write/edit in cafes, at the beach, in my tent, on a park bench.

    1> If I download a post for editing offline, there’s no way in #MT to incrementally save edits for safe keeping. System/software crashes destroy edits. And periodic need to shutdown/reboot means awkwardly saving the edits with an external text editor.

    2> I may be offline when a great idea for an edit comes along. In #MT I do have a draft copy of the original post (a ‘published draft’) but working with that is not recommended. First, if I’ve already edited the post, the draft is now obsolete. Second, re-publishing a published draft creates a new blog entry. To post the edits I need to download the current blog entry, then copy the edits to it. That’s a bit awkward.

    What would be cool: functionality to “synchronise” the blog links (on demand only)so that they contain all entry data (edit fields + categories). Automatically saving the edited entry to disk as part of publishing (much like is done with drafts) would work almost as well. For multi-author blogs, display a warning whenever a published post is opened for editing.

    Kudos for an increasingly elegant tool.



  29. @P – All that’s well and good but here’s my problem with your review. You posted a review about offline editing tools, as what you *expect* them to do and not what they are *declare* that they do. All of the above are feature requests – not deficiencies in the application. Especially since this is all well covered ground, by now.

    And to that, #MT is not now (nor will it be in the immediate future) the multi-blog tool as you see it. It’s not just a question of “adding a blog id to a draft”. You’ve got too coordinate that with the categories and the text filters which may or may not be the same and may or may not have changed on the server. When you get back a list of Blog links, they are sorted by unique ID which is particular per Blog; now that becomes a double key if multiple blog are tracked. What’s worse is when you get the list of Blog links, MT simply throws you a list of n entries with limited information returned. If it was to sync the entire draft or try to slipstream something in the middle, it would have to download many megs of data, which again, goes beyond the scope of what I want #MT to be. Add to that the simple thing that I’ve been maintaining all along: MT is a server based product; #MT is not. I do not want to be in the business of administrating MT from #MT and that’s very much what we’re getting into, if there’s offline-saved editing or shift things while offline. And THEN there could be the issue of multiple users on the same blog which would make things even more complicated.

  30. I seem to have hit upon a problem, I’m not sure but I think it has to do with the update in MT as that is the only thing that has changed. I can no longer retrieve my links. If I try to update my links I get a 500 internal server error. Any thoughts?

  31. Randy I’ve used this for the past week and have had not one complaint or problem.

    Very solid release from my useage.

    As always, thanks for sharing your project with us.

  32. Hey Randy,

    Fair enough. What I expect an offline editing tool to do is provide the ability to edit my blog, while offline.

    Let’s just clarify some terminology. #MT, Zempt and w.Bloggar are not really designed to be offline editors. Instead, they are online editors with some offline composing support. That is, they all allow users to compose offline, but editing tasks are expected to be performed while online. My opinion, implicitly stated in the review, is that #MT fulfills that design goal best.

    What the review points out are the problems those of us who want to edit offline will encounter while using these programs, and defines the kind of functionality required to support true offline editing.

    I’ll edit the review to clarify this distinction and will also post your insights into the implementation hurdles for offline editing. Unfortunately, I have to go offline now, so those edits will have to wait ;)



  33. @Jeff – Please drop me an email; I haven’t upgraded to 2.661 yet but it did move to 2.65 without an issue. Maybe something got left off. If you can, please turn on the tracing window and send me that as well… I’ll get ya running (at least I hope so!)

    @Promo – Cool, thanks!

    @P – Fair enough too: #MT is described as an “offline blog writer” on my software page. In fact, I was against adding the “editing” capabilities for exactly this reason. And no worries on the review – don’t censor yourself for my benefit! I just wanted to point out that we have different expectations for #MT could do (and Zempt and w.Bloggar, as well).

  34. Sure, I ‘spose – just didn’t want you to change it simply b/c I didn’t I agree with… I constantly piss people off with my writings, so I know what it’s like to catch backlash :)

  35. A few things I noticed today, and always seem to forget to mention:


    When entering text, if I make an error, Control+Z will “undo” it. But if I use the format buttons (Bold, Underline, etc), Custom Tags shortcuts or Control+B (etc.) the keyboard shortcut for “undo” doesn’t remove them.


    This question is just my curiosity: from a programming point of view, does “undo” always remove the last block of text entered, or can it be set to do a character at a time. Or do you have any control over that?


    In the Format dropdown, you have the KB shortcuts for Custom Tags as “Ctrl+D1” and so on. However, Ctrl+D actually switches to the advanced editing view. The true shortcut is Ctrl+1 (and so on) as stated in the “Tools>Options>Tags” tab.


    Under format, and under Custom Tags, it seems like it would make sense if there were an option to “Set Custom Tags” that would take you to the “Tools>Options>Tags” tab. This is just from a usability point of view, it certainly isn’t a big deal. But as the program solidifes I am turning my attention to the logical functions of the user interface.

    Again, none of these are deal breakers, just observations.

  36. @Promo – #1 is known… it’s been that way since ver 1 but b/c I haven’t mucked with the edit box, I’ve sort of left it.

    #2 plays into #1 – I’ve let .NET/Windows do all the undo work for me.

    #3 is cited in the FAQ or at least the Blog entries. For some reason the control I’m using for menu systems considers that to be Ctrl+1, Ctrl+2, etc. Makes no sense to me but I’ve also noticed that the group that supplied that for free is now charging cash for it, so I’m content to keep it as is :D

    #4 That’s where I had it for quite a while, but moved it under the Options dialog b/c I thought it made for a cleaner approach. Of course at the time, the only tags that changed were Bold, Italic, and Underline, but even so… I thought it might have been better.

  37. This is excellent really. Its like using Word and I love it. I’ve tried zempt and w.blogger and this is my favourite however the only thing I have to say is that you have to somehow get the dictionary to ignore html ! I know its already been reported but I just wanted my bit !

  38. All feedback is always welcomed, of course! I’m still waiting to hear about ignoring the HTML but one thing that I’ve done to help me is add some tags into the user’s dictionary… including Blog and blog because they weren’t in there either!

  39. Randy – thanks for developing this great tool and providing it without requiring payment.

    I have been playing with v2.1 on MT 2.661 for a few days now and have just discovered what I believe may be a bug.

    When using “Post all open entries” two unexpected things happen:

    1. The entries post in reverse order.

    2. The entries do not have the paragraph tags &ltp&gt &ltp/&gt around the entry body if there is extended text.

    Also, one request – it would be nice if when the bold, italic, and underline buttons are pressed with no text highlighted, if the cursor would default to being between the tags, rather than after.

    And, just wondering… have you given any consideration to adding additional formatting tools such as text alignment, font, font color, font size, lists, and some of the HTML built-in ala w.Bloggar?

  40. @David – I haven’t installed 2.661 yet, but a question on the bit: that’s usually controlled by the Text Filter selection… is it set to convert line breaks everywhere?

    As to the other formatting tools, I hadn’t thought much about them… I might revisit that, now that the project is just about “done” for now… well again.

  41. I don’t use w.Bloggar but…keep in mind that MT relies mostly upon XHTML (Transitional by default, though Strict is possible too) and FONT etc. tags are way deprecated, and I for one would not want to see them rear their ugly heads in #MT’s toolbar… In the 21st century we use CSS for font face/color/size, as well as the majority of text alignment. Perhaps a best case scenario would be a toolbar button with a dropdown menu that would include all the default MT CSS classes and id’s, and even then, I would not hold my breath waiting for that to get implemented into #MT.

    I’ve been with #MT since…well… way early in the v1.x beta cycle, and I gather that at no point was #MT ever envisioned to be a full-blown editor ala HTML-Kit, etc. with MT posting support.

  42. You’ll have to give me some more info as I’ve never seen the interface (nor would I think that an RSS reader would want to be tied to a blog writer – I did do some work to make #MT open a file in “edit” mode for Nick’s RSS reader, but that never went past initial conversations).

  43. I agree there, I also use SharpReader and as of now it only lists w.bloggar as being compatible. Wouldn’t it be nice to have the two premier “Sharp” packages get to know each other? :)

  44. I’ve got SharpReader open right now… I see nothing under options that list blog writers… am I missing something?

  45. Nevermind – found out why it was hiding and what is required to do a plug-in (as the most recent Rant shows). The question now is what to do with it, so please leave me a comment on the new thread with some feedback!

  46. Interesting that MT allows that as a valid character for a password.

    Workaround would be not to have an in your password :)

Leave a Reply to Randy Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.