You are currently browsing the category archive for the ‘nerdiness’ category.
While working on Blog by Email (http://blogbyemail.com) I came across the necessity to create my own HTML helper class. For those who don’t know helper classes “…reduce the amount of tedious typing of HTML tags that you must perform to create a standard HTML page.”
The registration request form on the site was getting hit pretty hard by spam bots and I was getting tired of cleaning up the mess, so I decided to add a captcha.
ReCaptcha is what I decided on and started down the rabbit hole. First of all there was only ASP.NET examples. Since I was writing this in ASP.NET MVC, I wanted to use a more, “MVC” approach to it. I came across an post on Devlicio.us named Using ReCaptcha with Asp.Net MVC. The post covered exactly everything I need, what it was missing is details around its steps, specifically Step 5 – Create a Html Helper to build and render the Captcha control. It shows the current code and nothing else:
public static string GenerateCaptcha( this HtmlHelper helper )
{
var captchaControl = new Recaptcha.RecaptchaControl
{
ID = "recaptcha",
Theme = "blackglass",
PublicKey = -- Put Public Key Here --,
PrivateKey = -- Put Private Key Here --
};
var htmlWriter = new HtmlTextWriter( new StringWriter() );
captchaControl.RenderControl(htmlWriter);
return htmlWriter.InnerWriter.ToString();
}
My first thought, is cool, I can just add an HTML helper to the view to generate the captcha, this is a good approach.
First stumble, that is a method, that needs to go into a class–what class should it go in to?
No problem, I’ll just look up creating helper methods. That was an easy search which rendered an ASP.Net site page, Creating Custom HTML Helpers. Great, now I have my examples. I matched it to an extension method; okay, I get that, I have used those before. I learned the syntax and added it to my site.
It doesn’t come up in Inteli-sense. What can it be. I changed all kinds of things around, from renaming the class, to changing the method name. I was wondering if it followed some naming scheme like controllers and models do. I don’t recall it needing to.
I decided to browse though the comments, see if anyone else ran into this. And there is was, someone named, ianchadwick mentioned a way to make the namespace global in the web.config. Well, damn, that is it, the view doesn’t know about my namespace BlogByEmail.Helpers. I added @using BlogByEmail.Helpers; to the top of the page, and everything fell into place.
To use the helper in the view simply use @Html.Raw(Html.GenerateCaptcha())
Html.Raw is needed to keep MVC from HTML Encoding the output.
Damn I feel dumb sometimes. …back to my code!
I learned something new over the last week which I not exactly sure of the benefit of. Probably because I still not entirely sure on how it is implemented.
It seems that in IIS7 that the default functionality is that the web.config in the root website is inherited to the child webs.
Of course I found this the hard way. I changed to a new web host and while setting up my base sites I wanted to try out a few new applications. I setup Umbraco under a sub-domain and played around with that for a while and remembered Orchard from MVConf. I setup a virtual directory, /orchard, and loaded up the site.
I kept receiving 500 errors when going to the site. There was a whole round of support emails around figuring out where the errors where steaming from. Once I found out I learned about the IIS7 inheritance.
For starters I want to list the ways I found to disable the inheritance and then move on to how this could be useful. (Man it’s always something)
First was the instructions from the Arvixe staff (which I think they found on SO)
<location path="." inheritInChildApplications="false"> <system.web> ... </system.web> </location>
There is also three examples in the IIS.NET bog: http://blogs.iis.net/steveschofield/archive/2009/09/19/control-web-config-inheritance-with-iis-7-asp-net-options.aspx
- You can set the enableConfigurationOverride attribute to false for an application pool
- allowSubDirConfig=false (as above)
http://msdn.microsoft.com/en-us/library/ms689469.aspx
- inhertInChildApplications property
I haven’t tried all of these yet. If you have leave a comment on how it well worked. It seems this functionality is enabled when the AppPool is set Integrated mode.
I just read one suggestion to use <clear /> what was inherited in certain sections.
Now for some reasoning on why this functionality was added
For now I just have this link from ASP.NET MSDN library. It starts out with:
“You can distribute ASP.NET configuration files throughout your application directories to configure ASP.NET applications in an inheritance hierarchy. This structure allows you to achieve the level of configuration detail that your applications require at the appropriate directory levels without affecting configuration settings at higher directory levels.”
I have some reading to do…
Update (8/14/2011):
Reading an informative article on iis.net, Understanding Sites, Applications, and Virtual Directories on IIS 7
The only problem I have with the article is that there absolutely no details on any of the information provided. Yet it’s a good overview of what they have done in the new version.
Now here are the details I have been looking for: http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis-7/
IIS7 Configuration Reference on IIS.NET
Reading on…
You would think it’s simple enough to get the file version information as it is set in Visual Studio’s UI setting, but it wasn’t for me. Even after Googling around I only discovered how to the the Assembly version, not the file version. Well not until I found this article. The information is at the end of it and it basically goes like this:
string fileVersion = FileVersionInfo
.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;
I then also wanted to get the date too. This is how I did it:
string fileDate = System.IO.File
.GetCreationTime(Assembly.GetExecutingAssembly().Location)
.ToString("MMMM dd, yyyy")
FileVersionInfo is at System.Diagnostics
Assembly is at System.Reflection
The best thing is I no longer have to remember to set this stuff before packaging up my app for shipment. Like I am doing right now: BD File Hash version 1.0.10 going out right now.
Happy Summer! The kids are out of school and already bored. My oldest son though is really into reading this year, I mean REALLY into it. He has probably read 10 books already on summer break.
His school has a degree program for reading books during the summer. Basically the students get a star for each day they read more than twenty minutes. My son has been doing much more than that I thought it would be great to keep track of it. I am sure looking back at the list at the end of the Summer he would be pretty impressed by the list too.
My first thought is that I would set him up with a blog, and he could type in the books he read on any given day. He and I have done some basic web page building together, so I thought he may get a kick out of this.
So I added a new blog to my account here at WordPress and picked a theme I hoped he didn’t think sucked. When I went to add his as a contributor to the blog I discovered he needed an email address to that. Hmm….
Well I have thought about setting him up with an email address in the past, but never did it as there was really no reason and he is only eight. So I went to Comcast to set him up with a family account. The didn’t have the name I wanted, damn. Well I found one close enough and went with that. At least Comcast has some parental controls, I’ll have to look deeper into that.
I set him up with a WordPress account and when there to log him in. When I logged in with his account to verify everything I was greeted with a page of many, many blogs. Well this is not good, he doesn’t need to be exposed to to this, too young yet, too dangerous.
Going to the next level
As I pondered this in a background processes it hit me, what about setting up a new domain and hosting the stuff myself!? I checked at GoDaddy and shit, the domain is available, excellent.
$10.67 / year for the domain, not so bad. $9.99 for privacy, what! that’s a bit outside. Then it hit me again, Dreamhost. Dreamhost has a free domain with a paid subscription and I never used it, perfect. Off to Dreamhost…
I was able to create and host the the domain on my current account and loaded up a WordPress blog in about 10 seconds. Added an email address and we are ready to go in a more “controlled” environment.
So a simple idea has bloomed into a fully hosted domain with private emails and sites, all for an eight year-old. I am the Tim Allen of the Internet!
So my son and I went over some of the stuff I put together and he is pretty interested in it all. As expected he is a bit overwhelmed. That’s OK, we’ll take it a step at a time in what ever direction interests him most.
I just finished a new file hashing tool, BD File Hash, which is hosted on CodePlex under the Microsoft Public License (Ms-PL).
The goal behind this Windows tool is an easier way to verify files you download from the internet. Many applications, ISO’s, and other files usually list a hash with them. This hash is used to verify the file you downloaded is the same file the author meant you to download. It prevents you from using corrupt or exploited downloads by allowing you to verify the file before you use it.
The problem I had with most file hashing tools, is that they needed to be run from a command line, or you had to open the hash value into a text editor and copy/paste it into the hashing application to be compared. So I wanted BD File Hash to be a convenient way to verify files using hashes.
BD File Hash has the following capabilities:
- Right click any file and select BD File Hash from your Send To menu
- Use a file picker to select the file with the authors hash value, it will automatically be parsed from the file and entered into the BD File has application
- Easily hash to files to see if they are the same
- Supports MD5, SHA-1, and SHA-256
- Please recommend any other hashing algorithms you may need.
- Save your default hash type to the one you use most often
BD File Hash requirements:
- .NET 3.5 SP1
- Windows Installer 3.1
Give BD File Hash a try today!
I have this really, really bad habit; I spend a lot of time searching and trying out new tools for my tool box. Some times to such extent I never get around to actually using the tools to build something, and that is just silly.
On the positive side is have given me a lot of exposure to the many, many options available to us, but on the negative side I think I use it as a form of procrastination. If I am looking for for something, than I don’t actually have to ‘work’ on something. How convenient.
The toughest part, is that I really enjoy checking out different applications. Experiencing what so many are putting their hard work into.
So I have started a list, it is by no means complete, nor do I really plan on making it complete. Though it will give you a pretty good idea on all the different things I have checked out and played around with.
I have wondered for some time how to keep footers at the bottom of the page. I have tried different methods of minimum heights, etc., but it only ever looked just “OK”.
On Stackoverflow today, the a question was asked about sticky footers and a method being used to achieve them. I thought the solutions interesting so I wanted to post them so I might be able to find this later.
Stackoverflow entry:
http://stackoverflow.com/questions/2239780/css-why-does-height-seem-to-be-set-when-its-not
The method referenced by the question’s author:
http://ryanfait.com/sticky-footer/
A suggestion made by someone else:
http://matthewjamestaylor.com/blog/keeping-footers-at-the-bottom-of-the-page
I hacking together a report today and discovered the Unicode text I received was actually in Unicode not ASCII. I remembered that ChrW(int) will convert character codes to their associated character. I really wasn’t in the mood to write parsing logic and test it, but luckily I came across a class which does this. I ripped out the method I needed and it worked great in all it’s simplicity. I have included this function below:
Public Function UnicodeToASCII(sText As String) As String
Dim saText() As String, sChar As String
Dim sFinal As String, saFinal() As String
Dim x As Long, lPos As Long
If Len(sText) = 0 Then
Exit Function
End If
saText = Split(sText, ";") 'Unicode Chars are semicolon separated
If UBound(saText) = 0 And InStr(1, sText, "&#") = 0 Then
UnicodeToASCII = sText
Exit Function
End If
ReDim saFinal(UBound(saText))
For x = 0 To UBound(saText)
lPos = InStr(1, saText(x), "&#", vbTextCompare)
If lPos > 0 Then
sChar = Mid$(saText(x), lPos + 2, Len(saText(x)) - (lPos + 1))
If IsNumeric(sChar) Then
If CLng(sChar) > 255 Then
sChar = ChrW$(sChar)
Else
sChar = Chr$(sChar)
End If
End If
saFinal(x) = Left$(saText(x), lPos - 1) & sChar
ElseIf x < UBound(saText) Then
saFinal(x) = saText(x) & ";" 'This Semicolon wasn't a Unicode Character
Else
saFinal(x) = saText(x)
End If
Next
sFinal = Join(saFinal, "")
UnicodeToASCII = sFinal
Erase saText
Erase saFinal
End Function
This has driven me crazy for weeks, I just haven’t been able to access web_dav I setup at dreamhost.com.
I found a perfect article on how to do it at Geek Boy’s Blog. It’s so simple,…
Make sure you add the port number to the url you provide for the network place.
E.g. http://www.mydomain.com:80/foo
Once I did that, I connected instantly. No more need for third party apps, I can just access it.
The goal of this document is to walk through the installation of a MoinMoin wiki without getting bogged down in any details. We’ll go through requirements, decisions, and steps to complete, that’s all. (OK, I did end up indicating what directories are added; I can’t stand when stuff is added I don’t know about.) I will follow up this post with the details for those who are interested. Once you have completed the steps herein you will have a working MoinMoin wiki on your Dreamhost.com shared hosting account. By no way is this the only way to set up MoinMoin on an account, or even the best way, but I tested it and it will work. Lets get to it!
Requirements
- Dreamhost shared hosting account.
- A domain setup as fully hosted
- Shell and FTP access to the domain account
Assumptions
- Dreamhost running python version 2.4
- MoinMoin version 1.8.5
- Understanding of editing files from Linux shell
- acctname is the accout name you used to access your domain account through ssh and FTPS.
- ~/ = $HOME = /home/acctname/
Decisions
- URL to run wiki from (we use sub directory) [We will use: http://hosteddomain/wiki]
- Private name for the wiki’s instance name [We will use: dhwiki]
Steps
- Download MoinMoin wiki tarball from http://moinmo.in/MoinMoinDownload (moin-1.8.5.tar.gz) to your local workstation.
- From FTP: upload file to Dreamhost into folder ~/files [/home/acctname/files]
** All commands from now on are from your shell access ** - cd ~/files
-
tar -xvzf ~/files/moin-1.8.5.tar.gz [new directory is created: ~/files/moin-1.8.5
-
cd ~/files/moin-1.8.5
-
python setup.py --quiet install --prefix=$HOME --record=install.log
[two directories created: ~/share/moin; ~/lib/python2.4/site-packages/MoinMoin]
- Setup environment variables
-
export PREFIX=$HOME
-
export SHARE=$PREFIX/share/moin
-
export WIKILOC=$SHARE
-
export INSTANCE=dhwiki
-
-
cd $WIKILOC
-
mkdir $INSTANCE
-
cp -R $SHARE/data $INSTANCE
-
cp -R $SHARE/underlay $INSTANCE
-
cp $SHARE/config/wikiconfig.py $INSTANCE
-
chmod -R o+rwX $INSTANCE
- Edit file $INSTANCE/wikiconfig.py
Find and change the follwing lines:- sitename = u'Your Wiki Title'
- logo_string = u'<img src="/wiki/common/moinmoin.png" alt="MoinMoin Logo">'
- Remove hash (#) in front of: page_front_page = u"FrontPage"
- data_dir = '/home/acctname/share/moin/dhwiki/data/'
- data_underlay_dir = '/home/acctname/share/moin/dhwiki/underlay/'
- url_prefix_static = '/wiki' [(remove # from line)]
- mail_smarhost = "dreamhost smtp server"
-
cd ~/hosteddomain
-
cp -R $SHARE/htdocs wiki
-
chmod -R a+rX wiki
-
cd wiki
-
mkdir ./cgi-bin
-
cp $SHARE/server/moin.cgi ./cgi-bin
-
chmod -R a+rx ./cgi-bin
-
cd ./cgi-bin
- Edit file moin.cgi
Find and change the following lines. Please remove the # if they exist on THESE lines:- sys.path.insert(0, 'home/acctname/lib/python2.4/site-packages')
- sys.path.insert(0, '/home/acctname/share/moin/dhwiki')
-
cd ..
- Edit file index.html
Find and change the following lines:- <meta http-equiv="refresh" content="0; URL=cgi-bin/moin.cgi/">
- Click <a href="cgi-bin/moin.cgi">here</a> to get to the FrontPage
- Go to your favorite browser and enter your wiki's domain: Http://hosteddomain/wiki
Use these instructions at your own risk. I extend no warranties or guarantees about the accuracy or safety of your data or website.
These instructions where tested by building the following wiki: http://MMonDH.brettski.com/wiki
All comments are welcome
References Used
- http://master.moinmo.in/MoinMoin/InstallDocs#basic-install
- http://www.wombatnation.com/misc/installMoinMoinDreamHost.html
Revision Information
- 11/21/2009
- Initial post after successfully building a wiki following exact steps
| Is this a negotiation, or are you just not interested? I am spending about 40k a month right now on consultants, so I have plenty of money to spend. Culture, to me it's directly impacted by budget and resources. At the time that we spoke my budget isn't nearly as high as it is right now. If you are talking about working evenings you do that already. | ||||||||
| 11/20/2009 | 8:11:16 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | When we first spoke, I was under the impression you no longer available after 6:00. You underpromised, so you could over deliver. I found out later that you were one of the hardest working guys that I know. | ||||
| 11/20/2009 | 8:13:30 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | Maybe you don't want to work that hard which is why it became an issue for you when I was pressing it. When I interview people, I always try and understand where their comfort levels are so I understand their boundries. The way I saw it is you wanted to have dinner with your family and got back on the computer later. Here is what I would ask for you to do. | ||||
| 11/20/2009 | 8:15:12 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | Look at your last month, and figure how many hours you really worked. Was it 40-50? 50-55? or +55 hours per week? I am interested in knowing because I am guessing your somewhere between 50-55. | ||||
| 11/20/2009 | 8:18:46 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | When we were in our discussions, you were giving me the perception that it could cause a problem for you at home if you were hoing to have to put in over 45 hours. What I really think is if you could make $110,000 in a 50 hour work week, or you could make $150,000 in a 60 hour work week I think you would probibly work 60. And then figure how you could get it down to 55... and then 52... | ||||
| 11/20/2009 | 8:21:25 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | And at the same time you were doing that, you would get me from 65 to 58, and 58 to 52, and so on. So at the end of the day, it really comes down to how much my time is worth as well as your time. Which is something you might not be taking into consiteration when you limit your opportunities and not discussing this further. | ||||
| 11/20/2009 | 8:23:43 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | Currently, I have 3 consultants I am paying 170,000 and they are not as smart as you are. They are down the street and you were down the block. At a certain point, I am sure you can understand that I can only afford to spend so much time in IT. I am ready to discuss dollars if you are. I am willing to discuss the boundries, or we can not discuss it at all. | ||||
| 11/20/2009 | 8:24:56 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | Hopefully you at least know where I am comming from. Bottom line, I am sitting here writing big checks saying to myself. Would I be writing checks this big and having to invest the time if Brett were here? | ||||
| 11/20/2009 | 8:27:22 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | I don't mind writing the checks, what I mind is when I have ot write the checks and still put in the time. You asked me what my commitment to you would be. If we were to do something, I told you I would give you a year of 60 hours a week of helping you acclimate yourself to our company. Thats a big investment of my time. I apprechiated the question because no one had ever asked me before. | ||||
| 11/20/2009 | 8:29:59 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | So here is what you have to ask yourself... Do I want to pass on the biggest financial opportunity of my life without going to see this man? The question I would ask you, is why would you want to limit your opportunities? | ||||
| 11/20/2009 | 8:34:35 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | The only thing I can think of is that you would be affraid of the industry, maybe that you were getting dragged into the deep end of the pool, giving up a job that I like that I am currently doing. Also, I did hire a senior level programmer for more money than you were asking for when you were interviewing and I am willing to pay him. Because I see how much value he brings me. | ||||
| 11/20/2009 | 8:35:27 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | I guess the question I would ask you is would you be willing to work with a programmer that makes more money that you did if he had the tallent? | ||||
| 11/20/2009 | 8:38:26 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | We have an aggressive agenda, I am looking to bring in top guys to make my life easier. I think you would be a good fit. Tallent costs money, I realize that. Something to consider, the banks are looking to change the comp plans for the Loan Officers and cut what they pay the Loan Officers by 50% of what they pay now. They are doing this as a result of the pressure they are getting from the gov | ||||
| 11/20/2009 | 8:39:50 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | The insurance companies that own mortgage companies are following suit. Which means that we have hundreds of people who are looking at our company as a result of massive pay cuts across the industry, which we are not participating in doing. | ||||
| 11/20/2009 | 8:41:18 PM | mikeg1@ephmc.com (E-mail address not verified) | Brettski *red+u | I know you have been looking for that 1 opportunity that you could capitalize on. Maybe this is it? Is it really that far from the relm of possibility? |
