libxslt-ruby 0.8.2 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/Rakefile +16 -37
  2. data/ext/libxslt/extconf.rb +18 -0
  3. data/ext/libxslt/libxslt.c +3 -0
  4. data/ext/libxslt/libxslt.h +1 -1
  5. data/ext/libxslt/ruby_xslt_stylesheet.c +6 -6
  6. data/ext/libxslt/version.h +3 -3
  7. data/ext/mingw/Rakefile +18 -32
  8. data/ext/vc/libxslt_ruby.vcproj +2 -2
  9. data/test/files/commentary.dtd +34 -0
  10. data/{lib/text.xml → test/files/fuzface.xml} +154 -129
  11. data/test/files/fuzface.xsl +4 -0
  12. data/test/files/params.xml +2 -0
  13. data/test/files/params.xsl +11 -0
  14. data/test/files/ramblings.xsl +46 -0
  15. data/test/test_deprecated.rb +97 -0
  16. data/test/test_libxslt.rb +21 -0
  17. data/test/test_stylesheet.rb +108 -0
  18. data/test/test_suite.rb +3 -0
  19. metadata +14 -33
  20. data/doc/classes/LibXSLT.html +0 -126
  21. data/doc/classes/LibXSLT/XSLT.html +0 -196
  22. data/doc/classes/LibXSLT/XSLT/Stylesheet.html +0 -250
  23. data/doc/classes/LibXSLT/XSLT/TransformContext.html +0 -117
  24. data/doc/classes/LibXSLT/XSLTError.html +0 -131
  25. data/doc/classes/XSLT.html +0 -125
  26. data/doc/created.rid +0 -1
  27. data/doc/files/CHANGES.html +0 -204
  28. data/doc/files/LICENSE.html +0 -133
  29. data/doc/files/README.html +0 -302
  30. data/doc/files/ext/libxslt/libxslt_c.html +0 -101
  31. data/doc/files/ext/libxslt/ruby_xslt_stylesheet_c.html +0 -101
  32. data/doc/files/ext/libxslt/ruby_xslt_transform_context_c.html +0 -101
  33. data/doc/files/lib/libxslt/deprecated_rb.html +0 -101
  34. data/doc/files/lib/libxslt_rb.html +0 -116
  35. data/doc/files/lib/xslt_rb.html +0 -135
  36. data/doc/fr_class_index.html +0 -32
  37. data/doc/fr_file_index.html +0 -35
  38. data/doc/fr_method_index.html +0 -28
  39. data/doc/index.html +0 -24
  40. data/doc/rdoc-style.css +0 -208
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ FILES = FileList[
18
18
  'ext/mingw/Rakefile',
19
19
  'ext/vc/*.sln',
20
20
  'ext/vc/*.vcproj',
21
- 'tests/**/*'
21
+ 'test/**/*'
22
22
  ]
23
23
 
24
24
  # Default GEM Specification
@@ -42,7 +42,7 @@ default_spec = Gem::Specification.new do |spec|
42
42
 
43
43
  spec.author = "Charlie Savage"
44
44
  spec.email = "libxml-devel@rubyforge.org"
45
- spec.add_dependency('libxml-ruby','>=0.8.2')
45
+ spec.add_dependency('libxml-ruby','>=0.9.0')
46
46
  spec.platform = Gem::Platform::RUBY
47
47
  spec.require_paths = ["lib", "ext/libxslt"]
48
48
 
@@ -62,39 +62,22 @@ end
62
62
  Rake::GemPackageTask.new(default_spec) do |pkg|
63
63
  pkg.package_dir = 'admin/pkg'
64
64
  pkg.need_tar = true
65
- pkg.need_zip = true
66
65
  end
67
66
 
68
- # ------- Windows Package ----------
69
- binaries = (FileList['ext/mingw/*.so',
70
- 'ext/mingw/*.dll'])
67
+ # ------- Windows GEM ----------
68
+ if RUBY_PLATFORM.match(/win32/)
69
+ binaries = (FileList['ext/mingw/*.so',
70
+ 'ext/mingw/*.dll*'])
71
71
 
72
- # Windows specification
73
- win_spec = default_spec.clone
74
- win_spec.extensions = []
75
- win_spec.platform = Gem::Platform::CURRENT
76
- win_spec.files += binaries.map {|binaryname| "lib/#{File.basename(binaryname)}"}
72
+ # Windows specification
73
+ win_spec = default_spec.clone
74
+ win_spec.extensions = ['ext/mingw/Rakefile']
75
+ win_spec.platform = Gem::Platform::CURRENT
76
+ win_spec.files += binaries.to_a
77
77
 
78
- desc "Create Windows Gem"
79
- task :create_win32_gem do
80
- # Copy the win32 extension built by MingW - easier to install
81
- # since there are no dependencies of msvcr80.dll
82
- current_dir = File.expand_path(File.dirname(__FILE__))
83
-
84
- binaries.each do |binaryname|
85
- target = File.join(current_dir, 'lib', File.basename(binaryname))
86
- cp(binaryname, target)
87
- end
88
-
89
- # Create the gem, then move it to pkg
90
- Gem::Builder.new(win_spec).build
91
- gem_file = "#{win_spec.name}-#{win_spec.version}-#{win_spec.platform}.gem"
92
- mv(gem_file, "admin/pkg/#{gem_file}")
93
-
94
- # Remove win extension from top level directory
95
- binaries.each do |binaryname|
96
- target = File.join(current_dir, 'lib', File.basename(binaryname))
97
- rm(target)
78
+ # Rake task to build the windows package
79
+ Rake::GemPackageTask.new(win_spec) do |pkg|
80
+ pkg.package_dir = 'admin/pkg'
98
81
  end
99
82
  end
100
83
 
@@ -115,15 +98,11 @@ Rake::RDocTask.new("rdoc") do |rdoc|
115
98
  'LICENSE')
116
99
  end
117
100
 
118
- task :package => :rdoc
119
- task :package => :create_win32_gem
120
- task :default => :package
121
101
 
122
102
  Rake::TestTask.new do |t|
123
103
  t.libs << "test"
124
104
  t.libs << "ext"
125
105
  end
126
106
 
127
- if not RUBY_PLATFORM.match(/mswin32/i)
128
- Rake::Task[:test].prerequisites << :extensions
129
- end
107
+ task :package => :rdoc
108
+ task :default => :package
@@ -85,6 +85,24 @@ need libxslt.
85
85
  EOL
86
86
  end
87
87
 
88
+ unless (have_library('exslt','exsltLibexsltVersion') or
89
+ find_library('exslt', 'exsltLibexsltVersion', '/opt/lib', '/usr/local/lib', '/usr/lib')) and
90
+ (have_header('exslt.h') or
91
+ find_header('exslt.h',
92
+ '/opt/include/libexslt',
93
+ '/usr/local/include/libexslt',
94
+ '/usr/include/libexslt'))
95
+ crash(<<EOL)
96
+ need libexslt.
97
+
98
+ Install the library or try one of the following options to extconf.rb:
99
+
100
+ --with-exslt-dir=/path/to/libexslt
101
+ --with-exslt-lib=/path/to/libexslt/lib
102
+ --with-exslt-include=/path/to/libexslt/include
103
+ EOL
104
+ end
105
+
88
106
  unless have_header('libxml/ruby_libxml.h') and
89
107
  have_header('libxml/ruby_xml_document.h')
90
108
  crash(<<EOL)
@@ -61,4 +61,7 @@ Init_libxslt_ruby(void) {
61
61
 
62
62
  ruby_init_xslt_stylesheet();
63
63
  ruby_init_xslt_transform_context();
64
+
65
+ /* Now load exslt. */
66
+ exsltRegisterAll();
64
67
  }
@@ -19,7 +19,7 @@
19
19
  #include "ruby_xslt_stylesheet.h"
20
20
  #include "ruby_xslt_transform_context.h"
21
21
 
22
- #include "version.h"
22
+ #include "version.h"
23
23
 
24
24
  #if ((RUBY_LIBXML_VER_MAJ != RUBY_LIBXSLT_VER_MAJ) || (RUBY_LIBXML_VER_MIN != RUBY_LIBXSLT_VER_MIN))
25
25
  #error "Incompatible LibXML-Ruby headers - please install same major/micro version"
@@ -50,7 +50,7 @@ ruby_xslt_stylesheet_alloc(VALUE klass) {
50
50
  */
51
51
  VALUE
52
52
  ruby_xslt_stylesheet_initialize(VALUE self, VALUE document) {
53
- ruby_xml_document_t *rdocument;
53
+ xmlDocPtr xdoc;
54
54
  xmlDocPtr xcopy;
55
55
  xsltStylesheetPtr xstylesheet;
56
56
 
@@ -65,8 +65,8 @@ ruby_xslt_stylesheet_initialize(VALUE self, VALUE document) {
65
65
  * has to be updated to always check and see if the document is
66
66
  * still valid. That's all doable, but seems like a pain, so
67
67
  * just copy the document for now. */
68
- Data_Get_Struct(document, ruby_xml_document_t, rdocument);
69
- xcopy = xmlCopyDoc(rdocument->doc, 1);
68
+ Data_Get_Struct(document, xmlDoc, xdoc);
69
+ xcopy = xmlCopyDoc(xdoc, 1);
70
70
  xstylesheet = xsltParseStylesheetDoc(xcopy);
71
71
  xstylesheet->_private = (void *)self;
72
72
  DATA_PTR(self) = xstylesheet;
@@ -122,7 +122,7 @@ ruby_xslt_coerce_params(VALUE params) {
122
122
  */
123
123
  VALUE
124
124
  ruby_xslt_stylesheet_apply(int argc, VALUE *argv, VALUE self) {
125
- ruby_xml_document_t *rdocument;
125
+ xmlDocPtr xdoc;
126
126
  xsltStylesheetPtr xstylesheet;
127
127
  xmlDocPtr result;
128
128
  VALUE document;
@@ -145,10 +145,10 @@ ruby_xslt_stylesheet_apply(int argc, VALUE *argv, VALUE self) {
145
145
  rb_funcall(params, rb_intern("flatten!"), 0);
146
146
  pParams = ruby_xslt_coerce_params(params);
147
147
 
148
- Data_Get_Struct(document, ruby_xml_document_t, rdocument);
148
+ Data_Get_Struct(document, xmlDoc, xdoc);
149
149
  Data_Get_Struct(self, xsltStylesheet, xstylesheet);
150
150
 
151
- result = xsltApplyStylesheet(xstylesheet, rdocument->doc, (const char**)pParams);
151
+ result = xsltApplyStylesheet(xstylesheet, xdoc, (const char**)pParams);
152
152
 
153
153
  if (!result)
154
154
  rb_raise(eXSLTError, "Transformation failed");
@@ -1,5 +1,5 @@
1
- #define RUBY_LIBXSLT_VERSION "0.8.2"
1
+ #define RUBY_LIBXSLT_VERSION "0.9.0"
2
2
  #define RUBY_LIBXSLT_VERNUM 0
3
3
  #define RUBY_LIBXSLT_VER_MAJ 0
4
- #define RUBY_LIBXSLT_VER_MIN 8
5
- #define RUBY_LIBXSLT_VER_MIC 2
4
+ #define RUBY_LIBXSLT_VER_MIN 9
5
+ #define RUBY_LIBXSLT_VER_MIC 0
data/ext/mingw/Rakefile CHANGED
@@ -3,40 +3,26 @@
3
3
  # built with VC++ while here we want to build
4
4
  # with MingW. So just roll our own...
5
5
 
6
- require 'rubygems'
7
- require 'rake/clean'
6
+ require 'fileutils'
8
7
  require 'rbconfig'
9
8
 
10
- RUBY_INCLUDE_DIR = Config::CONFIG["archdir"]
11
- RUBY_BIN_DIR = Config::CONFIG["bindir"]
12
- RUBY_LIB_DIR = Config::CONFIG["libdir"]
13
- RUBY_SHARED_LIB = Config::CONFIG["LIBRUBY"]
14
- RUBY_SHARED_DLL = RUBY_SHARED_LIB.gsub(/lib$/, 'dll')
15
-
16
- EXTENSION_NAME = "libxslt_ruby.#{Config::CONFIG['DLEXT']}"
17
-
18
- gem_specs = Gem::SourceIndex.from_installed_gems.search('libxml-ruby')
19
- LIBXML_RUBY_DIR = gem_specs.sort_by {|spec| spec.version}.reverse.first.full_gem_path
20
-
21
- CLEAN.include('*.o')
22
- CLOBBER.include('libxslt.so')
23
-
24
- task :default => "libxslt"
25
-
26
- SRC = FileList['../libxslt/*.c']
27
- OBJ = SRC.collect do |file_name|
28
- File.basename(file_name).ext('o')
29
- end
30
-
31
- SRC.each do |srcfile|
32
- objfile = File.basename(srcfile).ext('o')
33
- file objfile => srcfile do
34
- command = "gcc -c -fPIC -O2 -Wall -o #{objfile} -I/usr/local/include -I../../rlibxml/ext #{srcfile} -I#{LIBXML_RUBY_DIR}/ext -I#{RUBY_INCLUDE_DIR}"
35
- sh "sh -c '#{command}'"
9
+ EXTENSION_NAME = "libxslt_ruby.#{Config::CONFIG["DLEXT"]}"
10
+
11
+ # This is called when the Windows GEM is installed!
12
+ task :install do
13
+ # Gems will pass these two environment variables:
14
+ # RUBYARCHDIR=#{dest_path}
15
+ # RUBYLIBDIR=#{dest_path}
16
+
17
+ dest_path = ENV['RUBYLIBDIR']
18
+
19
+ # Copy the extension
20
+ cp(EXTENSION_NAME, dest_path)
21
+
22
+ # Copy dllss
23
+ Dir.glob('*.dll').each do |dll|
24
+ cp(dll, dest_path)
36
25
  end
37
26
  end
38
27
 
39
- file "libxslt" => OBJ do
40
- command = "gcc -shared -o #{EXTENSION_NAME} -L#{LIBXML_RUBY_DIR}/lib -L/usr/local/lib #{OBJ} -lxml_ruby -lxslt -lxml2 #{RUBY_BIN_DIR}/#{RUBY_SHARED_DLL}"
41
- sh "sh -c '#{command}'"
42
- end
28
+ task :default => :install
@@ -18,7 +18,7 @@
18
18
  <Configurations>
19
19
  <Configuration
20
20
  Name="Debug|Win32"
21
- OutputDirectory="C:\Development\ruby\lib\ruby\gems\1.8\gems\libxsl-ruby-0.8.2-x86-mswin32-60\lib"
21
+ OutputDirectory="C:\Development\ruby\lib\ruby\gems\1.8\gems\libxslt-ruby-0.8.2-x86-mswin32-60\lib"
22
22
  IntermediateDirectory="$(ConfigurationName)"
23
23
  ConfigurationType="2"
24
24
  CharacterSet="1"
@@ -63,7 +63,7 @@
63
63
  <Tool
64
64
  Name="VCLinkerTool"
65
65
  AdditionalDependencies="msvcrt-ruby18.lib libxml2.lib libxslt.lib libexslt.lib"
66
- OutputFile="C:\Development\ruby\lib\ruby\gems\1.8\gems\libxslt-ruby-0.7.1-x86-mswin32-60\lib\$(ProjectName).so"
66
+ OutputFile="C:\Development\ruby\lib\ruby\gems\1.8\gems\libxslt-ruby-0.8.3-x86-mswin32-60\lib\$(ProjectName).so"
67
67
  LinkIncremental="2"
68
68
  AdditionalLibraryDirectories="C:\Development\ruby\lib;C:\Development\msys\local\lib"
69
69
  GenerateDebugInformation="true"
@@ -0,0 +1,34 @@
1
+ <!ELEMENT commentary (meta, body)>
2
+ <!ELEMENT meta (author, version, date, id, title, subtitle?)>
3
+
4
+ <!-- Metadata about the requirements -->
5
+ <!ENTITY % string "#PCDATA">
6
+ <!ENTITY % character "#PCDATA">
7
+ <!ENTITY % letter "#PCDATA">
8
+ <!ENTITY % number_att "CDATA">
9
+
10
+
11
+ <!ELEMENT author (first_name, last_name, email)>
12
+
13
+ <!ELEMENT first_name (%string;)>
14
+ <!ELEMENT last_name (%string;)>
15
+ <!ELEMENT email (%string;)>
16
+
17
+ <!ELEMENT version (#PCDATA)>
18
+ <!ELEMENT date (#PCDATA)>
19
+ <!ELEMENT id (#PCDATA)>
20
+ <!ELEMENT title (#PCDATA)>
21
+ <!ELEMENT subtitle (#PCDATA)>
22
+
23
+ <!ELEMENT body (para+)>
24
+
25
+
26
+ <!ELEMENT para (#PCDATA|thought|url|ol)*>
27
+ <!ATTLIST para
28
+ style (default|ps) "default">
29
+
30
+ <!ELEMENT ol (li+)>
31
+ <!ELEMENT li (#PCDATA)>
32
+ <!ELEMENT url (#PCDATA)>
33
+ <!ELEMENT thought (#PCDATA)>
34
+
@@ -1,129 +1,154 @@
1
- <?xml version="1.0"?>
2
- <html><head><title>Ramblings - Fuzface... - The Internet's a big place and here's some proof...</title></head><body><h1>Fuzface...</h1><h3>The Internet's a big place and here's some proof...</h3>
3
- By: SeanChittenden<br/>
4
- Date: $Date: 2008-07-09 23:35:19 -0600 (Wed, 09 Jul 2008) $<br/>
5
- <p>
6
- I think it's a tragedy that I'm going to start off my new
7
- commentary by talking about facial hair and the Internet.
8
- Something about that just screams pathetic, but whatever: it's
9
- humor and that's life.
10
- </p>
11
-
12
- <p>
13
- I've been working at home for a while now, which has been great.
14
- I've been doing a lot of reading, good work, contributing to the
15
- FreeBSD project, and living life at my own pace. The problem?
16
- I don't have to interact with people, so I've let my appearance
17
- slide a bit, most notably I've gone two weeks without shaving
18
- and I have an awful hairy face.
19
- </p>
20
-
21
- <p>
22
- Nothing is worse than going for a hard run, coming back, and
23
- then bending your head down so that the hairs under your chin
24
- touch the hairs on your neck. This has to be one of the most
25
- disgusting/gross feelings I've experienced in a while. While
26
- today wasn't the first time I'd experienced such a slimy tangled
27
- mess, it is the first time I seriously considered shaving part
28
- of my face, but not all of it: I was considering a beard.
29
- </p>
30
-
31
- <p>
32
- Alright, so it's 5pm and I'm a sweaty post-run mess (it was 110
33
- degrees in direct sunlight according to my thermometer) and
34
- considering the possibility of growing a beard. Swifty nift?
35
- Maybe. This is something I'd never done before, let alone
36
- seriously consider. Normally I'd call my dad for such manly
37
- advice, but he is: a) normally in another state, and; b) in
38
- another country right now probably growing a beard (he's
39
- notorious for coming back from a trip with a gnarly unshaven
40
- face, sometimes he'll shape it into a decent beard). So, what's
41
- a tech-junkie to do? Hop on the Internet and see if Google's
42
- able to provide me with some inspiration.
43
- </p>
44
-
45
- <p>
46
- Sure enough, I typed in "pictures of bearded men" and I was able
47
- to find something: 14,000 pages of something to be exact.
48
- Anyway, so most of these were rinky dink sites, a few of them
49
- had some promise. One guy was trying to start a tradition where
50
- everyone grows a beard for New Years. As I was scrolling down
51
- the page trying to find some pictures, my mind was having the
52
- following thought process: <i>This seems like a dumb
53
- idea... New Years provides a perfectly good excuse to kiss some
54
- total stranger that you've had your eye on for the duration of a
55
- New Years party. Why waste such an opportunity with a crappy
56
- kiss?</i> And at about this point I said this page sucks,
57
- and flipped back to my search results.
58
- </p>
59
-
60
- <p>
61
- Since I'd never done this before, I didn't know what was
62
- fashionably correct in terms of where a guy should shave under
63
- his neck, or what the deal was... I knew there were lots of
64
- styles out there, just none that I could picture in my mind
65
- (save maybe Santa Claus and a few really gnarly beards that are
66
- long enough to be used as full-body covering. Oooh! And don't
67
- forget the Russian and Amish beards, those stand out in my mind
68
- too.). Google, being pretty comprehensive, and the Internet
69
- being huge, found the exact screwball page I was looking for:
70
- http://fuzface-gallery.tripod.com/
71
- </p>
72
-
73
- <p>
74
- I don't know if I really should be amazed at the sheer number of
75
- entries that Google returned, or that the Internet is big enough
76
- to house such random gallery of crap, but it is and it never
77
- ceases to amaze me... it's almost as amazing as the fact that
78
- some bozo spent the time to create such a page. Don't people
79
- have lives? Oh wait, I just visited his page... so back to my
80
- diatribe...
81
- </p>
82
-
83
- <p>
84
- There were tons of faces, lots of men, lots of hair, and plenty
85
- of styles to choose from. Page after page of faces and hair.
86
- Ugh. This wasn't getting any where and I was now entertaining
87
- the rebound though of shaving my head. Time to close my browser
88
- and hop in the shower: I reak. So what'd I do? Well, after
89
- looking through enough of those pictures, I decided a few
90
- things:
91
- </p>
92
-
93
- <p>
94
- <ol><li>
95
- I'm amazed that the Internet is big enough to foster the
96
- creation of such random and utterly useless information. Then
97
- again, I've been on and using the Net since '95, so this
98
- shouldn't surprise me that much.
99
- </li><li>
100
- There are a lot of guys out there with varying tastes in,
101
- shall we say, "facial hair styles," most of which I find
102
- pretty unappealing.
103
- </li><li>
104
- I don't like beards. After one clogged drain, two
105
- reapplications of shaving cream, and a few pases with the
106
- razor, it took me about 5-10 minutes to get a nice cleanly
107
- shaven face.
108
- </li><li>
109
- &lt;crass comment&gt;And - back me up here fellas, you can
110
- sympathize with this feeling after you get done looking
111
- through a magazine for a hair-cut style (ladies.. just smile
112
- and nod and pretend you care) - after looking at a few dozen
113
- pictures of men, I was able to safely reaffirm my desire for
114
- heterosexual relations (translation from Bill Clintonese: have
115
- sex with a woman). And with that thought in mind, I began to
116
- pine for the college porn collection of old. Mmmm,
117
- Playboy.&lt;/crass comment&gt;
118
- </li></ol>
119
- </p>
120
-
121
- <p>
122
- ::grin:: Until next time. -Sean
123
- </p>
124
-
125
- <p>
126
- P.S. To the guys out there with beards, this is just my
127
- opinion: take it with a grain of salt.
128
- </p>
129
- </body></html>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <?xml-stylesheet href="fuzface.xsl" type="text/xsl"?>
3
+
4
+ <!DOCTYPE commentary SYSTEM "commentary.dtd">
5
+
6
+ <commentary>
7
+ <meta>
8
+ <author>
9
+ <first_name>Sean</first_name>
10
+ <last_name>Chittenden</last_name>
11
+ <email>sean@chittenden.org</email>
12
+ </author>
13
+ <version>$Version$</version>
14
+ <date>$Date: 2008-07-09 23:35:19 -0600 (Wed, 09 Jul 2008) $</date>
15
+ <id>$Id: fuzface.xml 58 2008-07-10 05:35:19Z cfis $</id>
16
+ <title>Fuzface...</title>
17
+ <subtitle>The Internet's a big place and here's some proof...</subtitle>
18
+ </meta>
19
+
20
+ <body>
21
+ <para>
22
+ I think it's a tragedy that I'm going to start off my new
23
+ commentary by talking about facial hair and the Internet.
24
+ Something about that just screams pathetic, but whatever: it's
25
+ humor and that's life.
26
+ </para>
27
+
28
+ <para>
29
+ I've been working at home for a while now, which has been great.
30
+ I've been doing a lot of reading, good work, contributing to the
31
+ FreeBSD project, and living life at my own pace. The problem?
32
+ I don't have to interact with people, so I've let my appearance
33
+ slide a bit, most notably I've gone two weeks without shaving
34
+ and I have an awful hairy face.
35
+ </para>
36
+
37
+ <para>
38
+ Nothing is worse than going for a hard run, coming back, and
39
+ then bending your head down so that the hairs under your chin
40
+ touch the hairs on your neck. This has to be one of the most
41
+ disgusting/gross feelings I've experienced in a while. While
42
+ today wasn't the first time I'd experienced such a slimy tangled
43
+ mess, it is the first time I seriously considered shaving part
44
+ of my face, but not all of it: I was considering a beard.
45
+ </para>
46
+
47
+ <para>
48
+ Alright, so it's 5pm and I'm a sweaty post-run mess (it was 110
49
+ degrees in direct sunlight according to my thermometer) and
50
+ considering the possibility of growing a beard. Swifty nift?
51
+ Maybe. This is something I'd never done before, let alone
52
+ seriously consider. Normally I'd call my dad for such manly
53
+ advice, but he is: a) normally in another state, and; b) in
54
+ another country right now probably growing a beard (he's
55
+ notorious for coming back from a trip with a gnarly unshaven
56
+ face, sometimes he'll shape it into a decent beard). So, what's
57
+ a tech-junkie to do? Hop on the Internet and see if Google's
58
+ able to provide me with some inspiration.
59
+ </para>
60
+
61
+ <para>
62
+ Sure enough, I typed in "pictures of bearded men" and I was able
63
+ to find something: 14,000 pages of something to be exact.
64
+ Anyway, so most of these were rinky dink sites, a few of them
65
+ had some promise. One guy was trying to start a tradition where
66
+ everyone grows a beard for New Years. As I was scrolling down
67
+ the page trying to find some pictures, my mind was having the
68
+ following thought process: <thought>This seems like a dumb
69
+ idea... New Years provides a perfectly good excuse to kiss some
70
+ total stranger that you've had your eye on for the duration of a
71
+ New Years party. Why waste such an opportunity with a crappy
72
+ kiss?</thought> And at about this point I said this page sucks,
73
+ and flipped back to my search results.
74
+ </para>
75
+
76
+ <para>
77
+ Since I'd never done this before, I didn't know what was
78
+ fashionably correct in terms of where a guy should shave under
79
+ his neck, or what the deal was... I knew there were lots of
80
+ styles out there, just none that I could picture in my mind
81
+ (save maybe Santa Claus and a few really gnarly beards that are
82
+ long enough to be used as full-body covering. Oooh! And don't
83
+ forget the Russian and Amish beards, those stand out in my mind
84
+ too.). Google, being pretty comprehensive, and the Internet
85
+ being huge, found the exact screwball page I was looking for:
86
+ <url>http://fuzface-gallery.tripod.com/</url>
87
+ </para>
88
+
89
+ <para>
90
+ I don't know if I really should be amazed at the sheer number of
91
+ entries that Google returned, or that the Internet is big enough
92
+ to house such random gallery of crap, but it is and it never
93
+ ceases to amaze me... it's almost as amazing as the fact that
94
+ some bozo spent the time to create such a page. Don't people
95
+ have lives? Oh wait, I just visited his page... so back to my
96
+ diatribe...
97
+ </para>
98
+
99
+ <para>
100
+ There were tons of faces, lots of men, lots of hair, and plenty
101
+ of styles to choose from. Page after page of faces and hair.
102
+ Ugh. This wasn't getting any where and I was now entertaining
103
+ the rebound though of shaving my head. Time to close my browser
104
+ and hop in the shower: I reak. So what'd I do? Well, after
105
+ looking through enough of those pictures, I decided a few
106
+ things:
107
+ </para>
108
+
109
+ <para>
110
+ <ol>
111
+ <li>
112
+ I'm amazed that the Internet is big enough to foster the
113
+ creation of such random and utterly useless information. Then
114
+ again, I've been on and using the Net since '95, so this
115
+ shouldn't surprise me that much.
116
+ </li>
117
+
118
+ <li>
119
+ There are a lot of guys out there with varying tastes in,
120
+ shall we say, "facial hair styles," most of which I find
121
+ pretty unappealing.
122
+ </li>
123
+
124
+ <li>
125
+ I don't like beards. After one clogged drain, two
126
+ reapplications of shaving cream, and a few pases with the
127
+ razor, it took me about 5-10 minutes to get a nice cleanly
128
+ shaven face.
129
+ </li>
130
+
131
+ <li>
132
+ &lt;crass comment&gt;And - back me up here fellas, you can
133
+ sympathize with this feeling after you get done looking
134
+ through a magazine for a hair-cut style (ladies.. just smile
135
+ and nod and pretend you care) - after looking at a few dozen
136
+ pictures of men, I was able to safely reaffirm my desire for
137
+ heterosexual relations (translation from Bill Clintonese: have
138
+ sex with a woman). And with that thought in mind, I began to
139
+ pine for the college porn collection of old. Mmmm,
140
+ Playboy.&lt;/crass comment&gt;
141
+ </li>
142
+ </ol>
143
+ </para>
144
+
145
+ <para>
146
+ ::grin:: Until next time. -Sean
147
+ </para>
148
+
149
+ <para style="ps">
150
+ P.S. To the guys out there with beards, this is just my
151
+ opinion: take it with a grain of salt.
152
+ </para>
153
+ </body>
154
+ </commentary>