CSS Best Practices  

Posted by ReelTym

CSS Best practice
  • Follow OOCSS (Object Oriented CSS), and DRY (Don’t Repeat Yourself) principles
  • Classes should not be named with the actual style it aims to display.  That defeats the purpose of using separating HTML for content and CSS for look and feel.  You will have tied the HTML to a specific look & feel.
    • Eg. class = ‘Blue-button’, or class = ‘width100’ are bad.
    • It should be something like class = ‘button’, or class = ‘primary-button’, and the colors and widths are put into the CSS.
  • The class should be used to specify the type of element it is.
    • Eg. Class = ‘search-result-row’  - all search result rows in the entire site has this class.
  • Objects or Identifiable Elements should be identified with an ID, which differentiates them from the elements with the same class.
    • Eg. ID = hotel-results or ID = flight-schedule-results, is the container that differentiates the different elements of class search-result-row

Example 1:

.header {width,font,etc}
.nav-button {style common across nav-button in header and footer}
#header-nav .nav-button {overrides for header .nav-button}
#footer-nav .nav-button {overrides for footer.nav-button}
.nav-button.selected {override for .nav-button for selected button}

<div ID=’header’>
<ul ID=’header-nav’ class=’navbar’>
<li ID=’nav-home’ class=’nav-button selected’>Home</li>
<li ID=’nav-hotel’ class=’nav-button’>Hotel</li>
<li ID=’nav-flight-schedule’ class=’nav-button’>Flight Schedules</li>

Example 2:

.search-results {styles for all search results lists in the site}
.search-result-row {style for all search results rows in the site}
#hotel-results .search-results {override for hotel specific search result}
#flight-schedule-results .search-results {override for flight schedule specific search result}
#hotel-result-1 .search-result-row {override for first row of hotel results}

<div ID=’hotel-results’ class=’search-results’>
                <div ID=’hotel-result-1’ class=’search-result-row’>
                                <span class=’vendor’>Silver Cloud</span>
                                <span class=’price’>$100</span>

<div ID=’flight-schedule-results’ class=’search-results’>
                <div ID=’flight-schedule-result-1’ class=’search-result-row’>
                                <span class=’vendor’>American Airlines</span>
                                <span class=’departure-time’>11:11 am</span>
                                <span class=’arrival-time’>12:12 pm</span>

Dynamic Search Conditions in T-SQL  

Posted by ReelTym

Full Article

Dynamic Search Conditions in T-SQL
Version for SQL 2008 (SP1 CU5 and later)

An SQL text by Erland Sommarskog, SQL Server MVP. Most recent update 2011-08-26.


CAUTION! This article does not apply to all versions of SQL 2008, only to SQL 2008 SP1 CU5 (10.0.2746) and SQL 2008 R2 CU1 (10.50.1702) and later. See the section A Tale of Service Packs and Cumulative Updates for more details.
A very common requirement in an information system is to have one or more functions where the users are able to search the data by selecting freely among many possible criterias. This is a tough challenge, because not only must you produce the desired output, but you must also keep the response time within acceptable limits, at least for common searches. And on top of all, the code must be maintainable, so that you easily can modify it to meet new needs and requirements.
There are two ways to attack this problem: dynamic SQL and static SQL. Up to SQL 2005, it was difficult to find solutions for static SQL that were simple to write and maintain and yet performed well, and the recommendation was to use dynamic SQL. In SQL 2008, things changed. Microsoft changed the hint OPTION(RECOMPILE) so it now works as you would expect. However, there was a serious bug in the original implementation, and you need at least CU5 of SQL 2008 SP1 or SQL 2008 SP2 to benefit from this feature.
Although, as we shall see, a solution with static SQL is in one sense more dynamic than dynamic SQL itself. There are still some performance implications, and a properly written solution with dynamic SQL can still be the best choice when you expect many concurrent searches. Dynamic SQL also remains the best choice when you need to support very complex search options.
This article exists in two versions. This version is for SQL 2008 SP1 CU5 and later. The other version is
for SQL 2005 and earlier as well for SQL 2008 SP1 up to CU5. That version includes various tricks to deal with the performance problems of static SQL solutions that no longer are an issue with SQL 2008. Therefore, I have not included these tricks in this version.
In this text, I first look at a fairly common simple case of dynamic search conditions, that I've called "alternate key lookup" where the more general methods shoot over the target. I then introduce a typical problem of general dynamic search conditions that serves as a case study when I later discuss the solutions for static and dynamic SQL in detail.

Using ISNULL forces index seek but COALESCE results in Index scan.  

Posted by ReelTym

set statistics io on

select BookingID, 
from   dbo.BookingDestinationServices 
where  BookingID          = COALESCE( 38035, BookingID )

Table 'BookingDestinationServices'.
Scan count 1,
logical reads 414,
physical reads 8,
read-ahead reads 458,
lob logical reads 40,
lob physical reads 2,
lob read-ahead reads 0.

set statistics io on
select BookingID, 
from   dbo.BookingDestinationServices 
where  BookingID          = ISNULL( 38035, BookingID )

Table 'BookingDestinationServices'.
Scan count 0,
logical reads 2,
physical reads 1,
read-ahead reads 0,
lob logical reads 40,
lob physical reads 2,
lob read-ahead reads 0.


Posted by ReelTym

Link to full article


There are a number of situations where the output results of a program become the input data for other program (for example you may want to compress your backup file with gzip tool and the compressed file be encrypted with Rijndael algorithm using GNU aes tool)

When both programs support stdin and stdout as a mechanism for input output, you can easily pipe the output of the first program to the input of the second program at the command line. For example

gzip –c mybackupfile.bkp | aes –e -p mypass -o mybackupfile.bkp.gz.enc

Unfortunately, this is not always the case and some programs don’t accept stdin and stdout for data input output (this is the case of Oracle import/export tools or Microsoft bcp tool).

On Unix environments these cases have been typically solved using mknod tool to create an OS file pipe. Once the pipe is created, the first program is able to write its output results to the pipe as if it was a normal file and the second program is able to read data from that pipe as if it was a normal file.

As an example, here you can find a largely used script by Oracle DBA to perform on the fly compression of an export operation

# Make a pipe
mknod expdat.dmp p
# Start compress the pipe in background
gzip -c < expdat.dmp > expdat.dmp.gz &
# Wait start the export
sleep 5
# Start the export
exp scott/tiger file=expdat.dmp

As far as I know, there is no similar native way to perform this operation on Microsoft Windows operating system.

I started thinking on it and finally I got a simple solution using Microsoft Windows pipes, zlib library (http://www.zlib.net/zlib123-dll.zip ) and a couple of small tools (less than 100 lines of code each of them)  I wrote: ZipPipe.exe and UnZipPipe.exe.

In point 1, I will show several uses of these tools, basically how to perform on the fly compression using Oracle imp and exp tools.
To get the necessary bin files (ZipPipe.exe, UnZipPipe.exe and zlib1.dll I would suggest to read point 2 and 3 of this document, but if you have any problem to obtain these files, just drop me an e-mail at jcarlossaez1@hotmail.com
Note: You can obtain a compiled version of these tools from http://cid-b3378f057444b65c.skydrive.live.com/self.aspx/P%c3%bablico/ZipPipe/zippipe.zip You don´t need anything more than these to run the tools.


1.1 On the Fly compression with Oracle Exp and Imp tools

On Unix environments, it has been largely used scripts allowing on the fly compression of the dump file generated by exp utility.
In the same way, on the fly decompression can be achieved to perform import operations reading directly from a compressed file.

A typical script to perform on the fly compression for the data generated by exp utility is

# Make a pipe
mknod expdat.dmp p
# Start compress the pipe in background
gzip -c < expdat.dmp > expdat.dmp.gz &
# Wait start the export
sleep 5
# Start the export
exp scott/tiger file=expdat.dmp

A typical script to execute an import operation reading directly from a compressed file is 

# Make a pipe
mknod expdat.dmp p
# Start decompress to the pipe in background
gzip -c < expdat.dmp.gz > expdat.dmp > &
# Wait start the import
sleep 5
# Start the import
imp scott/tiger file=expdat.dmp

There is no way to accomplish this work in the same way on Windows platforms. When exporting you first export to a normal file and then, you can compress it (except using NTFS built-in compression capabilities, but this is not what we are looking for)
When importing, you need first decompress the file and then you can import the file.

However, whit the ZipPipe and UnZipPipe tools, you can achieve the same behaviour as you have on Unix.

How to perform on the fly compression while exporting on Windows platforms?

Until now, your bat scripts looks something similar to this

exp scott/tiger file=expdat.dmp
gzip  expdat.dmp expdat.dmp.gz

Only when exp tool finishes its job, you can start compressing the file. This way needs more disk space and in most of the cases more time.

Look how you can export and compress without any intermediate file

start /MIN ZipPipe EXPPIPE expdat.dmp.gz 9
exp scott/tiger file= \\.\pipe\EXPPIPE

The first line starts our “compressor engine” that listens on named pipe \\.\pipe\EXPPIPE and writes the compressed information to the file expdat.dmp.gz  with a compression level of 9 (compression level can be in the range 1 to 9)
When export tool completes the export operation, ZipPipe process detects it and ends

How to perform on the fly decompression while importing on Windows platforms?

Until now, your bat scripts looks something similar to this

gzip –d expdat.dmp.gz expdat.dmp
imp scott/tiger file=expdat.dmp

Only when decompressor tool finishes its job, you can start importing the file. This way needs more disk space and in most of the cases more time.

Look how you can import and decompress without any intermediate file

start /MIN UnZipPipe IMPPIPE expdat.dmp.gz
imp scott/tiger file= \\.\pipe\IMPIPE

The first line starts our “decompressor engine” that listens that reads from the compressed file expdat.dmp.gz and writes the decompressed information to named pipe \\.\pipe\IMPPIPE
When import tool completes the import operation, UnZipPipe process detects it and ends.

You can think on ZipPipe and UnZipPipe as the equivalent tool to mknod plus gzip in the Unix environment.
Of course, you can make many remarks to this solution, but it allows you to achieve the same functionality you have on Unix, saving lot of space in Disks and most of the times reducing import/export duration.

One more thing: it is a pity these tools don’t work with new expdp and impdp tools available in Oracle10g. But don’t blame to Microsoft Windows or to these tools themselves. You won’t be able to perform on the fly compression with these new tools on Unix environments too. It is due to a change in the design of these tools. (And don’t get wrong with the COMPRESS parameter of these new tools. This parameter only compresses metadata).

1.2 On the Fly compression with Microsoft bcp tool

What a terrible pity! I have been able to use these tools only to on the fly compress the output of the bcp in native format.
I can not use them for on the fly decompression when using bcp to import or even when downloading data in no native format.
Perhaps someone can make them work.

How do you use bcp to export pubs..authors table to an uncompressed file and then compress?

Typically, at the command prompt in the source SQL Server you only need to type:

            bcp  pubs..authors out  authors.txt -T –n
            gzip authors.txt authors.txt.gz

The first command exports the data and the second one compress the generated file using gzip tool

Note that during the process you need enough space to store authors.txt and authors.txt.gz simultaneously provided that at the end you can delete the uncompressed file.

How can you use bcp and ZipPipe to export pubs..authors table directly to a compressed file?

At the command prompt in the source SQL Server you only need to type:

            start /MIN ZipPipe authors_pipe authors.txt.gz 9
            bcp  pubs..authors out  \\.\pipe\authors_pipe -T -n

The first command starts our compressor tool (you can think this step is similar to create a pipe and start the background compressor in the Unix environment all in one step).
Second, you only need to start bcp tool, but giving the pipe \\.pipe\ authors_pipe  as the file name where bcp has to write.

Another  process is launched. This background process is our compressor tool that creates and listens on named pipe \\.pipe\ authors_pipe and saves the data once compressed in the file authors.txt.gz. This process automatically ends when bcp completes export operation.

And you can see how file authors.txt.gz is the only file generated in one step.

Rest of the article where you can find how to build these tools

Query a web service from SQL Server via CLR  

Posted by ReelTym

Full Article

Building a Bottle Rocket with a Parachute  

Posted by ReelTym


Create one bottle rocket that will fly straight and remain aloft for a maximum amount of time.

  • Two 2-liter bottles
  • One small plastic cone (athletic)
  • Duct Tape
  • Scissors
  • String
  • Manila Folder
  • Large Plastic Trash Bag
  • Masking Tape or Avery Paper reinforcement labels (you'll need 32/chute.)
  • Hole punch
Cut the top and the bottom off of one bottle, so that the center portion or a cylinder remains.
Tape the cylinder to another bottle to create a fuselage (a place to store the parachute).
Cut out fins, fold back to attach to the rocket
Cut out the outside line.
Fold down center and up on outside flaps to secure to bottle
Get the manila folder; fins will be made from it. Cut three shapes out of the folded bottom in the shape that the diagram shows. Your fins will be triangular.
Beware, the picture is illusive. Fold it together all the way, just like a paper airplane wing.
Side view of actual fin.
The next drawing indicates how the fin should look once folded.
Hold the bottle in the door jam and use the right angle to guide your lines. Be careful not to mark on door jam.
Here is the results of the line drawn in the door jam. Perfectly straight lines.
Mark straight lines on the bottle by putting the bottle in the door frame or a right angle and trace a line on the bottle with a marker. Use these lines as guides to place the fins on the bottles.

Green Duct Tape used here for illustration purposes.
Make three fins and tape them on the rocket. Be sure that the fins are spaced equally around the rocket body. This can be achieved by using a piece of string and wrapping it around the bottle and marking the string where it meets the end. Mark the string and lay it flat on a meter-stick or ruler. Find the circumference of the bottle by measuring the length of the string to the mark. Once you know the circumference, then you can divide it by three to find the distances the fins should be separated.
Orange Plastic Athletic Cone
Clay stuffed inside
Use the athletic cone to make your nose cone. Use fairly rigid scissors and cut the bottom square off of the cone. Depending upon your project's mass limitations, place a golf ball sized piece of clay in the tip of the cone. This will add mass to the cone and give the rocket/cone more inertia. Then, using scissors, trim the cone to make it symmetrical. (Hint: the diameter of the bottom of the cone should be a little wider than the diameter of a 2-liter bottle.
String used to attach the nosecone to the body of the rocketAttach the cone with string to the top of the other two-liter bottles so that it looks like the diagram. Tie a knot in the end of each piece of string to give it more friction and tape it using a piece of duct tape to the inside of the cone and to the inside of the rocket body.
Many students have trouble with their nosecone getting stuck on the top of the rocket and not coming off. This can be prevented by making a pedestal for the cone to sit on. It should be high enough up so that there is space between the cone and the top of the parachute compartment. You can make a pedestal out of the same material you will make the fins, the manila folder. Make three mini-fins, invert them and tape them on the rocket where the cone should sit.

Making the Parachute
Garbage bag with top and bottom ends open. Don't forget a good parachute has shroud lines that are at least as long as the diameter of the canopy. Lay your garbage bag out flat. Cut off the closed end. It should look like a large rectangle and be open at both ends. Lay down the bag on a flat surface and smooth it out.
Fold it in half vertically. Keep both ends open. The bag has a long side and a short side and is open at both ends. Fold it in two so that the short side is half as long as it was originally.
Fold it in half across the middle horizontally. Now both open ends are down and together. Make sure the edges are perfectly lined up during each fold. Now fold it in half along the long axis.
Fold it to make a triangle. Take the top edge to the corner.
The bottom has more sides than less.
Make a triangle with the base of the triangle being the closed end of the previous fold.
Hint: Flip it over before you fold it again. This will help you determine how long you can make the radius of the parachute.Now fold it again. Fold the hypotenuse so that it lines up with the right side of the triangle in the above drawing.
First, Mark it.
Second, draw the guide line for cutting.
Finally, you cut it on the line you drew.
Examine the base of the triangle and find the shortest length from the tip to the base. This is the limiting factor for chute size. The most pointed end will end up being the middle of the canopy.
For an example; if you want the diameter of the chute to be 34 inches then measure 17 inches from the center of the canopy (the most pointed side of the parachute) along each side, mark it and then cut it.
Two parachutes. Who wants one?After cutting it, unfold it. If you have been successful there should be two canopies.

You must reinforce the edge of the plastic bag with something. Masking tape works fine.
Fold the canopy in half, then into quarters, then into eighths. Carefully crease the folds each time. Crease it well and fold it again. Now the canopy is divided into 16ths. Unfold the parachute. Notice the crease marks. Get masking tape and put a piece around the edge at each fold mark. You may also use Avery reinforcement tabs. Place one on both the inside and outside of every crease, making sure that they are overlaid on top of each other.
Punch holes through every piece of masking tape or Avery tab pairs and use these to attach the kite-string shroud lines.

As mentioned earlier the minimum length of the shroud line should be the same length as the diameter of the canopy.

After punching the holes fold the canopy in half. Pick four holes and tie the shroud lines to the holes. After doing this tie the four lines together at the end most distant from the canopy.

Repeat this four times until the chute is completed.
 Here is what you should get. Once you have it complete attach it inside the fuselage. Generally a couple of pieces of duct tape will hold the parachute to the rocket. Pack the parachute loosely and put the nosecone on the rocket. You are now ready to launch your rocket.
Here is my launcher controls from NERDS Inc. Here is my launcher from NERDS Inc. It is used at Los Angeles County and California State Science Olympiad events. Carefully read the safety instructions. Fill the rocket half full of water, place on the launch pad, pressurize, and launch.
Out to the Field to launch it. 5, 4, 3, 2, 1, Blastoff!!! Parachute Deployment!!!Be safe, and have fun!

Understanding and resolving SQL Server blocking problems  

Posted by ReelTym

Click here for full article....

In this article, the term "connection" refers to a single logged-on session of the database. Each connection appears as a Session ID (SPID). Each of these SPIDs is often referred to as a process, although it is not a separate process context in the usual sense. Rather, each SPID consists of the server resources and data structures necessary to service the requests of a single connection from a given client. A single client application may have one or more connections. From the perspective of SQL Server, there is no difference between multiple connections from a single client application on a single client computer and multiple connections from multiple client applications or multiple client computers. One connection can block another connection, regardless of whether they emanate from the same application or separate applications on two different client computers.

Blocking is an unavoidable characteristic of any relational database management system (RDBMS) with lock-based concurrency. On SQL Server, blocking occurs when one SPID holds a lock on a specific resource and a second SPID attempts to acquire a conflicting lock type on the same resource. Typically, the time frame for which the first SPID locks the resource is very small. When it releases the lock, the second connection is free to acquire its own lock on the resource and continue processing. This is normal behavior and may happen many times throughout the course of a day with no noticeable effect on system performance.

The duration and transaction context of a query determine how long its locks are held and, thereby, their impact on other queries. If the query is not executed within a transaction (and no lock hints are used), the locks for SELECT statements will only be held on a resource at the time it is actually being read, not for the duration of the query. For INSERT, UPDATE, and DELETE statements, the locks are held for the duration of the query, both for data consistency and to allow the query to be rolled back if necessary.

For queries executed within a transaction, the duration for which the locks are held are determined by the type of query, the transaction isolation level, and whether or not lock hints are used in the query. For a description of locking, lock hints, and transaction isolation levels, see the following topics in SQL Server Books Online:

  • Locking in the Database Engine
  • Customizing Locking and Row Versioning
  • Lock Modes
  • Lock Compatibility
  • Row Versioning-based Isolation Levels in the Database Engine
  • Controlling Transactions (Database Engine)
When locking and blocking increase to the point where there is a detrimental effect on system performance, it is usually due to one of the following reasons:
  • A SPID holds locks on a set of resources for an extended period of time before releasing them. This type of blocking resolves itself over time, but can cause performance degradation.
  • A SPID holds locks on a set of resources and never releases them. This type of blocking does not resolve itself and prevents access to the affected resources indefinitely.
In the first scenario above, the blocking problem resolves itself over time as the SPID releases the locks. However, the situation can be very fluid as different SPIDs cause blocking on different resources over time, creating a moving target. For this reason, these situations can be difficult to troubleshoot using SQL Server Enterprise Manager or individual SQL queries. The second situation results in a consistent state that can be easier to diagnose.

Pitching Drills  

Posted by ReelTym

Cat Osterman and Jennie Finch Tips  

Posted by ReelTym

2011 District 9 Junior All Start Fast Pitch Softball Tournament  

Posted by ReelTym

Using PATINDEX to find character in a string.  

Posted by ReelTym

declare @test table ( id int identity(1,1) primary key clustered, value varchar(10) )

insert into @test (value)
    select null union all
    select '' union all
    select '1' union all
    select '-' union all
    select '1.2' union all
    select '1,23' union all
    select ',' union all
    select '.'

select * from @test where patindex( '%[,.-]%', value ) > 0

-- Should return

id          value
----------- ----------
4           -
5           1.2
6           1,23
7           ,
8           .

Connor vs. SQL  

Posted by ReelTym

Blog on various SQL tuning and internals topics.

DtDNS IP Updater CMD Script  

Posted by ReelTym

Filename: update.cmd

@echo off
cd /d %~dp0
echo ----------------------------- GETTING IP -----------------------------
wget "http://myip.dtdns.com" -o getip.log
type getip.log
del getip.log
if exist index.html (
  set /p MYIP=<index.html
  echo MYIP=%MYIP%
  del index.html
  echo ----------------------------- SETTING IP -----------------------------
  wget "http://www.dtdns.com/api/autodns.cfm?id={domain}&pw={password}&ip=%MYIP%" -o setip.log
  if exist "autodns.cfm*" del autodns.cfm*
  type setip.log
  del setip.log

2011/07/05-07 All Stars Practices  

Posted by ReelTym

07/05/11, practice, 6:00 to 8:00 at EHS
07/06/11, practice game, 6:30 to 8:30 at EHS
07/07/11, practice, 6:00 to 8:00 at EHS

2011 Marysville (July 2-3) Junior Fast Pitch Softball Tournament - 14U  

Posted by ReelTym

RV Fridge/Freezer/AC Parts  

Posted by ReelTym

2011 Softball Schedule  

Posted by ReelTym

ELL Green/Red Wolves

VisitorHomeDateDayTime Field


March MaddnessNSAMarch 12-13Marysville Rained out
Practice Game - March 20March 19-20Woodinville
Monroe InviteNSAMarch 26-27Monroe Need to pickup 2 players
The AXEUSSSAApril 9-10Federal Way
Pair-A-DiceASAApril 16-17Vegas
Kent BashUSSSAApril 23 one dayKentSaturday only
Panther Easton Invite - ASAASAMay 14-15SalemNot enough players
Memorial Day TournamentASAMay 28-29-30SeattleWenatchee
FW SLAM ImvitationalASAJune 4-5Seattle
Father's Day InviteUSSSAJune 18-19Kent
July ClassicJuly 16-17SeattleNot Signed up-June decision
WA State ChampionshipJuly 23-24KentNot Signed up-June decision
Bend ShowdownASAAug 12-13-14Bend


Posted by ReelTym

Webelos Rank Requirements

  1. Have an adult member of your family read and sign the Parent Guide in the front of the Webelos Scout Book.
  2. Be an active member of your Webelos den for 3 months.
  3. Know and explain the meaning of the Webelos badge.
  4. Point out and explain the three parts of the Webelos Scout uniform. Tell when to wear the uniform and when not to wear it.
  5. Earn the Fitness and Citizen activity badges and one other activity badge from a different activity badge group.
  6. Plan and lead a flag ceremony in your den that includes the U.S. flag.
  7. Show that you know and understand the requirements to be a Boy Scout.
    1. Demonstrate the Scout salute, Scout sign, and Scout handshake. Explain when you would use them.
    2. Explain the Scout Oath, Scout Law, Scout motto, and Scout slogan.
    3. Explain and agree to follow the Outdoor Code.
  8. Faith
    After completing the rest of requirement 8, do these (a, b, and c):
    1. Know: Tell what you have learned about faith.
    2. Commit: Tell how these faith experiences help you live your duty to God. Name one faith practice that you will continue to do in the future.
    3. Practice: After doing these requirements, tell what you have learned about your beliefs.
    And do one of these (d OR e):
    1. Earn the religious emblem of your faith*
    2. Do two of these: (Use this Worksheet to track activity)
      • Attend the mosque, church, synagogue, temple, or other religious organization of your choice, talk with your religious leader about your beliefs. Tell your family and your Webelos den leader what you learned.
      • Discuss with your family and Webelos den leader how your religious beliefs fit in with the Scout Oath and Scout Law, and what character-building traits your religious beliefs have in common with the Scout Oath and Scout Law.
      • With your religious leader, discuss and make a plan to do two things you think will help you draw nearer to God. Do these things for a month.
      • For at least a month, pray or meditate reverently each day as taught by your family, and by your church, temple, mosque, synagogue, or religious group.
      • Under the direction of your religious leader, do an act of service for someone else. Talk about your service with your family and Webelos den leader. Tell them how it made you feel.
      • List at least two ways you believe you have lived according to your religious beliefs.

Arrow of Light Requirements
The highest award in Cub Scouts is earned by Webelos that have been active participants in their den and are ready to join a Boy Scout troop. Many of the requirements for the Arrow of Light are intended to familiarize the scout with a local troop and hopefully show him that crossing over into a troop is the next step to take in scouting. A scout that earns his Arrow of Light patch has also completed nearly all the requirements to earn the Scout badge in the troop so he has already begun his Boy Scout trail.
  1. Be active in your Webelos den for at least six months since completing the fourth grade (or for at least six months since becoming 10 years old), and earn the Webelos badge.
  2. Show your knowledge of the requirements to become a Boy Scout by doing all of these:
    • Repeat from memory and explain in your own words the Scout Oath or Promise and the 12 points of the Scout Law. Tell how you have practiced them in your everyday life.
    • Give and explain the Scout motto, slogan, sign, salute, and handshake.
    • Understand the significance of the First Class Scout badge. Describe its parts and tell what each stands for.
    • Tell how a Boy Scout uniform is different from a Webelos Scout uniform.
    • Tie the joining knot (square knot)
    See the Boy Scout Study Guide.
    Use this handy Memorization Wheel to learn and review the Scout Oath, Law, Motto, Slogan, and Outdoor Code.
  3. Earn five more activity badges in addition to the three you already earned for the Webelos badge. These must include:
    • Fitness (already earned for the Webelos badge)
    • Citizen (already earned for the Webelos badge)
    • Readyman
    • Outdoorsman
    • At least one from the Mental Skills Group
    • At least one from the Technology Group
    • Two more of your choice
  4. With your Webelos den, visit at least
    • one Boy Scout troop meeting
    • one Boy Scout-oriented outdoor activity.
    • (If you have already done this when you earned your Outdoorsman activity badge, you may not use it to fulfill requirements for your Arrow of Light Award.)
  5. Participate in a Webelos overnight campout or day hike. (If you have already done this when you earned your Outdoorsman activity badge, you may not use it to fulfill requirements for your Arrow of Light Award requirements.)
  6. After you have completed all five of the above requirements, and after a talk with your Webelos den leader, arrange to visit, with your parent or guardian, a meeting of a Boy Scout troop you think you might like to join. Have a conference with the Scoutmaster.
  7. Complete the Honesty Character Connection.
    1. Know: Say the Cub Scout Promise to your family. Discuss these questions with them. What is a promise? What does it mean to keep your word? What does it mean to be trustworthy? What does honesty mean?
    2. Commit: Discuss these questions with your family. Why is a promise important? Why is it important for people to trust you when you give your word? When might it be difficult to be truthful? List examples.
    3. Practice: Discuss with a family member why it is important to be trustworthy and honest. How can you do your best to be honest even when it is difficult?
Online Webelos Arrow of Light Test

arrow of light award

Webelos Scout Activity Badges

- Activities to earn the Webelos badge and Arrow of Light award

Frank's House Warming Party (Chrysler Club)  

Posted by ReelTym