Archives for Victoria Hall

Ruby On Rails – Part Four – Rake

I have always been interested in automating common development tasks. I have used Ant, Maven, and Nant pretty extensively and now I’m learning the details of Rake. There’s something special about seeing messages fly by in a command shell, and know that the computer is doing all these repetitive tasks — not you!

What is different about Rake then any of the others build tools mentioned is that you create a Rakefile by writing Ruby code, instead of using xml. There is a

I would recommend you read this excellent article on defmacro.org (take your time and read through it — it’s really worth it) that does a good job of explaining the benefits of Lisp. A cool thing, since we’re talking about build automation, is one section, titled “Ant Reloaded”, talks about how Java could have been used instead of XML. In our case it’s Ruby being used in a Rakefile.

This tutorial is written by the developer of Rake, and is a good tour through the main features of Rake. I would suggest you read it first, followed by this article by Martin Fowler which reviews some examples of interesting things you can do with a Rakefile.

I created a simple example Rakefile. I’m sure no one would actually need a script like this, but the simple scenario was good for an example of how to use Rake.

I’ve included the code below, the formatting is off because I pasted it in my blog editor, but I hope it will be a good example to someone just getting started with Rake. If you have any suggestions on how to improve this simple Rakefile example, please add a comment to this post.

# ———————————————————-

# This is just an example to illustrate how to use Rake

# By Rob Herbst

# ———————————————————-

# Require rake/clean to get the built in clean task

require ‘rake/clean’

# Require ftools to get File.copy

require ‘ftools’

# Define constants we’ll use later

HTML_SRC_DIR = “html”

WEB_DEST_DIR = “website”

IMAGES_DIR = “images”

SITE_MAP = “sitemap.html”

HTML_SRC_FILES = FileList[“#{HTML_SRC_DIR}/*.html”]

IMAGE_SRC_FILES = FileList[“#{HTML_SRC_DIR}/*.jpg”]

# Add the WEB_DEST_DIR to the list to get cleaned

CLEAN.include(WEB_DEST_DIR)

# The default task depends upon the package task

task :default => [:package]

# The package task depends upon clean, create structure, and the task to create the site map file.

task :package => [:clean, :create_structure, :sitemap] do

     puts “The package task was called.”

             # Copy over the html files

     HTML_SRC_FILES.each do |f|

          File.copy(“#{f}”, “#{WEB_DEST_DIR}”)

     end

             # Copy over the image files

             IMAGE_SRC_FILES.each do |f|

          File.copy(“#{f}”, “#{WEB_DEST_DIR}/images”)

     end

end

# Utility task to create the structure of the website

task :create_structure do

     puts “The create_structure task was called.”

     Dir.mkdir(WEB_DEST_DIR)

     Dir.chdir(WEB_DEST_DIR)

     Dir.mkdir(IMAGES_DIR)

     Dir.chdir(“..”)

end

# Task to create the sitemap.html file

task: :sitemap do

     open(“#{WEB_DEST_DIR}/#{SITE_MAP}”, “w”) do |outs|

          outs.puts “<html><head>Site Map</head><body><ul>”

          HTML_SRC_FILES.each do |f|

               file_name = f.sub(HTML_SRC_DIR + “/”, “”)

               outs.puts “<li><a href=\”#{file_name}\”>#{file_name}</></li>”

          end

          outs.puts “</ul></body>”

     end

end

 ——————————————————-

Why you need SEO services in Calgary

SEO plays a significant role for your brand’s online success. It does not only produce top rankings in the search outcomes. Several people are utilizing search engine optimization to market their brands well. Below are some of the reasons why you require SEO services in Calgary.

 

  1. Delivers High ROI

SEO is the only type of online marketing that delivers a fast return. For you to get the best returns with SEO you should sign up with the best SEO Company. If you use an inexperienced SEO Company you will not succeed in marketing your brands hence your business will be lowered by these inexperienced companies. When search engine optimization is done well it offers nonstop traffic hence promoting your business.

 

  1. SEO Works best for you

If SEO is done appropriately it will deliver continuous as well as consistent traffic to your brand. If you work with an experience SEO Company your website or brand will have endless as well as consistent traffic. Several people fall because they use inexperienced SEO providers which are cheap. For you to succeed you should invest in the best SEO service provider who does it excellent.

  1. SEO Will never Disappear

SEO will never disappear. It continues to develop with time as well as those who understand SEO are constantly adapting with the new changes. The concept of search engine optimization will never end, however the methods to maintain the rankings constantly changes. SEO will always be available provided that the internet is. Therefore it is a perfect idea for you to be involved now.

 

  1. The struggle does it

Several people assume that SEO requires to be done until high rankings are attained; however this isn’t the case at all. When a website or a brand attains the high rank it will need extra work so as to maintain as well as continue to enhance the top rankings. Your struggle will be attaining those top rankings. SEO ensures that your website attains those top rankings and has got the required traffic all the time.

 

  1. Everybody looks For Businesses Online

When a SEO strategy is in place you will be able to enhance the odds of your target customers’ base. Think on how significant the internet is for your potential customers. Customers can make purchases, review the business or products as well as search for a business. A customer can do this from a desktop, mobile or tablet device. If you want your brand to be found online then you require SEO. You require a SEO strategy so as to draw more organic traffic to your brand or website. It offers an incredible ROI if done perfectly.

 

The above are the top five reasons why you require SEO Services in Calgary. SEO helps to draw more organic traffic to your website and gives it top ranking.

Text Editors — Back To Vim!

Being the keyboard kind of guy that I am, I’ve totally gotten back into the Vim editor. I had used it years ago, and discovered it again recently when I was looking for a text editor for some Ruby code I was writing.

It’s one of those power tools that most people, myself included, really didn’t like very much the first time you use it. But then you achieve a certain level of proficiency and you can slice and dice any text you have to edit so quickly that you become very spoiled.

I also have switched to using a black background. I found a great dark color scheme for Vim called Moria, that I would highly recommend. It’s a very readable, easy on the eyes scheme, that just seems right to me. I’ve posted an image of my setup using the abbrev.rb file from Ruby 1.8.5.

If you like using keyboard shortcuts, you owe it to yourself to try the Vim text editor. It does take some time to get used to a modal editor, but if you are going to be editing lots of text, it’s time well spent.

I still really like the text editor built into Visual Studio and will continue to post any tips and keyboard shortcuts that I find useful there too.

WinDBG Tips

I had previously blogged about finding some good tutorials on how to get started. I’ve been using the WinDBG debugger a little bit more lately and I’ve put together a “cheat sheet” that I use for the most common commands and I thought I would share them. Almost all of these commands are specific to the SOS extension to debug .NET code.

If you are a seasoned WinDBG user, you’ll know all of these command by heart, but if you are just getting started this might help. The first thing to do is run, don’t walk to setup your “Symbol Search Path” setting. Enter CTRL+S from inside WinDBG, mine looks like this:

You can find out more about it in this Microsoft support article.

The WinDBG command line has TAB completion, so when you type the first few characters of a command, hit TAB to cycle through the possible completions.

I have picked up the majority of these tips by reading some of the great blogs on MSDN. If you are interested in learning a lot more about WinDBG and how to debug some very difficult problems you need to subscribe to Tess’s blog right away!

If you know of any other tips or helpful WinDBG command, please post them in the comments and I’ll add them to the list.

Command Description
.loadby sos mscorwks Loads the correct version of the SOS(.NET) extension dll based on the version of mscorwks currently loaded
.chain View the currently loaded extensions
.hh command Opens the help file for the specified command. For example: .hh ~
!help Displays help for extensions, including for SOS a list of commands
!help command Displays help for the specified extension command. For example: !help clrstack
.cls Clears the sceen
~ List all threads
!threads List managed threads
~# s Set current thread, where # is a thread number, for example: ~3 s
!clrstack Display the CLR stack
!clrstack Display the CLR stack with parameters
kb Display the stack frame for the native thread
!dso Dump objects on the stack
!do Dump managed object
dc Display the contents of memory as DWORDS and ASCII chars
!dumpheap Dumps the contents of the managed heap
!dumpheap -stat Display stat summary of managed heap
!dumpmt address Dumps the MethodTable of the specified address
!dumpmt -md address Dumps the MethodTable of the specified address and displays a list of all the methods on the object
!dumpclass address Displays the EEClass for the specified address
!dumpobj address Display the details of the object at the specified address
!eestack Runs !DumpStack on all threads
!dumpruntimetypes Displays all System.RuntimeType object from the managed heap
!runaway Displays thread time statistics
.time Displays System Uptime, Process Uptime, Kernel Time and User Time
!syncblk Displays synchronization lock info
!dumpheap -thinlock Displays objects locked with thinlocks instead of syncblk’s
!dumpheap -type System.String -stat Displays count and total size of the specified type (in this case System.String) on the heap
!address Display virtual memory stats, load addresses and reserve/commit info
!address -summary Display just the summary virtual memory info
!eeheap -gc Display garbage collector generation info
!pe Print exception details
~*kb Display callstacks for all threads
!finalizequeue Display stats and contents of the finalizer queue

Rails Plugin For VIM

I found a plugin for VIM that was designed just for Rails coding by Tim Pope. I thought the first line of the documentation was great

“TextMate may be the latest craze for developing Ruby on Rails applications,
but Vim is forever.”

It provides:

  • quick navigation commands from model to view and controller
  • rake integration
  • extends ‘gf’ command to understand Rails
  • CTRL+X, CTRL+U autocompletion
  • interface to the script commands
  • convenient log file viewing

ScottGu’s ASP.NET 2.0 Tips/Tricks TechEd Talk Posted

If you develop with ASP.NET you need to subscribe to Scott Guthrie’s blog.

His blog is full of detailed and well written articles that provide invaluable insight to any ASP.NET programmer.

He just posted the PowerPoint presentation and the sample code from his TechEd talk. I would highly recommend you download and review the sample project. I know every time I download samples that Scott has posted I learn something new.

Some of the features shown:

  • app_offline.htm
  • cross page postbacks
  • maintaining scrollback position
  • default button
  • custom databinding expressions

ScottGu’s ASP.NET 2.0 Tips/Tricks TechEd Talk Posted

If you develop with ASP.NET you need to subscribe to Scott Guthrie’s blog.

His blog is full of detailed and well written articles that provide invaluable insight to any ASP.NET programmer.

He just posted the PowerPoint presentation and the sample code from his TechEd talk. I would highly recommend you download and review the sample project. I know every time I download samples that Scott has posted I learn something new.

Some of the features shown:

  • app_offline.htm
  • cross page postbacks
  • maintaining scrollback position
  • default button
  • custom databinding expressions