<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1689887569269461760</id><updated>2012-02-16T15:23:22.338-08:00</updated><category term='Greetings'/><category term='perl'/><title type='text'>Ian's World</title><subtitle type='html'>Stuff on my mind</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-1647549734226288124</id><published>2012-02-15T14:45:00.000-08:00</published><updated>2012-02-16T15:23:22.443-08:00</updated><title type='text'>IIS7 FastCgiModule configuration</title><content type='html'>I won't be using FastCgiModule on IIS7. I had hoped to use it to run Perl scripts and, perhpas, avoid faults I have experienced with the CgiModule on IIS7 on Windows 7, but after several days searching and trying, I did not have any significant progress towards a working solution and had found no documentation from Microsoft that described how the module works or how to do anything with it other than run PHP, so I decided to cut my losses and stop the effort.&lt;br /&gt;&lt;br /&gt;Instead, I will use Apache HTTP Server.&lt;br /&gt;&lt;br /&gt;There are many examples of configuring IIS7 for FastCGI/PHP, but I am interested in Perl and, in particular, Strawberry Perl.&lt;br /&gt;&lt;br /&gt;Enabling FastCGI in IIS7 is easy, just select the CGI feature.&lt;br /&gt;&lt;br /&gt;I haven't found thorough documentation of the configuration of FastCGI from Microsoft. Maybe my searching or persistence are insufficient, but all I have seen from them is marketing, how to enable it and examples of configuration for PHP.&lt;br /&gt;&lt;br /&gt;Many people have posted examples and instructions for configuration for specific purposes, but these generally present what to do without explaining why or how it works or what the alternatives are. Most of these I have found are for PHP or ActiveState Perl and mostly for older versions of the module and IIS.&lt;br /&gt;&lt;br /&gt;One clue that at least got my toe in the water (i.e. enabled me to run perl with arguments) was &lt;a href="http://wiki.catalystframework.org/wiki/deployment/iis7_fastcgi"&gt;this post on Catalyst&lt;/a&gt;. It showed the unusual (in my experience) feature of separating the executable from its arguments with a vertical bar rather than a space, as is done almost everywhere else. As usual with such examples, there was no explanation.&lt;br /&gt;&lt;br /&gt;So, in the Executable field of the Edit Module Mapping window of IIS Manager for the FastCgiModule module, one can put:&lt;br /&gt;&lt;br /&gt;&lt;full path to executable&gt; '|' &lt;arguments to be passed to executable&gt;&lt;br /&gt;&lt;br /&gt;Mysteriously, none of "%s%", %s% or %s get expanded in this context, as they do in the same field for the CgiModule. Obviously, the syntax and semantics of the Executable field are module specific.&lt;br /&gt;&lt;br /&gt;So, I wonder what all the possibilities are and how they relate to the specific query being processed.&lt;br /&gt;&lt;br /&gt;I wonder where Microsoft has documentation of their FastCGI feature, beyond how to enable it.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.iis.net/ConfigReference/system.webServer/handlers/add"&gt;Adding Handlers (add)&lt;/a&gt; page really should say more about how the text in the scriptProcessor attribute is parsed, what substitutions are done and how it is processed. If this is, as I suspect it is, module specific, then this should be stated and the documentation of the individual modules should provide details of what the module does with the attribute value.&lt;br /&gt;&lt;br /&gt;The instructions at &lt;a href="http://www.cosmicscripts.com/servers/fastcgi_perl.html"&gt;CosmicScripts.com&lt;/a&gt; refer toC:\windows\system32\inetsrv\fcgiext.ini but there is no such file on my Windows7 system, even though I have the FastCgiModule module installed and configured and executing Perl script. Although &lt;a href="http://www.cosmicscripts.com/servers/fastcgi.html#iis"&gt;this page&lt;/a&gt; lists IIS7, the &lt;a href="http://www.cosmicscripts.com/servers/fastcgi_perl.html"&gt;configuration page&lt;/a&gt; says "coming soon" for IIS7. I note also that the FCGI::IIS module documentaiton says IIS7 is supported, and refers to the CosmicScripts site for configuration instructions.&lt;br /&gt;&lt;br /&gt;The environment of the script I have running has a variable named _FCGI_X_PIPE. This is the only variable that appears to be relevant to FCGI. Searching Microsoft for references to this variable name, there are two Japanese article found and &lt;a href="http://support.microsoft.com/kb/980363"&gt;KB980363&lt;/a&gt;, which provides a brief description. There are only 17 hits searching MSDN, and they almost all give the same information. None of them describe how the interface works.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/kjsingla/rss.aspx"&gt;this post&lt;/a&gt; mentions where IIS7 keeps configuration of the FastCgiModule module: in applicationHost.config, along with other IIS configuration. That file exists on my Windows7 system with IIS7, and it does have some of my configuration for the FastCgiModule module, though it is hard to be sure it is all there.&lt;br /&gt;&lt;br /&gt;After many hours of searching, I have found so little other than examples of how to configure for PHP that I am not inclined to pursue using IIS/FastCgiModule with Perl.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-1647549734226288124?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/1647549734226288124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=1647549734226288124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/1647549734226288124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/1647549734226288124'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2012/02/iis7-fastcgimodule-configuration.html' title='IIS7 FastCgiModule configuration'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-5680259585766954549</id><published>2012-02-11T16:46:00.001-08:00</published><updated>2012-02-11T18:54:33.305-08:00</updated><title type='text'>gmusicbrowser on Windows7</title><content type='html'>This is a long ramble describing how I installed Perl modules Glib and Gtk2 on Strawberry Perl (This is perl 5, version 12, subversion 3 (v5.12.3) built for MSWin32-x86-multi-thread) on Windows 7 Professional 64bit. I like &lt;a href="http://gmusicbrowser.org/"&gt;gmusicbrowser&lt;/a&gt; and lately must use Windows on my laptop, but there is no binary distribution for Windows and it needs Glib and Gtk2 modules, which I didn't have installed, so...&lt;br /&gt;&lt;br /&gt;There were many false starts and errors along the way. There seems to be some confusion about getting Glib and Gtk2 running on Windows. After all, what is required is not very complicated (or, I should say that others have done all the hard work and, while a simple 'cpan install Glib' and 'cpan install Gtk2' don't work, there isn't much that needs to be done in order to get it goind. I have edited out most of my failed attempts leaving, I hope, a fairely simple procedure including a few particularly relevant errors that might help others searching for solutions.&lt;br /&gt;&lt;br /&gt;I already had &lt;a href="http://strawberryperl.com/"&gt;Strawberry Perl&lt;/a&gt; installed.&lt;br /&gt;&lt;br /&gt;Gmusicbrowser uses Glib and Gtk2 modules. These are not bundled with Strawberry Perl.&lt;br /&gt;&lt;br /&gt;Various people suggest "ppm install Bundle::Gnome2" as an easy way to install Gtk2 on Windows. I tried that. It installed the Bundle::Gnome2.pm module, but none of the modules it referenced. Maybe it works OK on ActiveState Perl but, despite various suggestions it works with Strawberry, it did nothing for me.&lt;br /&gt;&lt;br /&gt;So I downloaded &lt;a href="http://www.gtk.org/download/win32.php"&gt;the "all-in-one" bundle of Gtk version 2.22&lt;/a&gt; from &lt;a href="http://www.gtk.org/"&gt;www.gtk.org&lt;/a&gt; and unzipped it to C:\GTK. Then edited Windows environment variables, adding C:\GTK\bin to PATH and setting LIB to 'C:\GTK\lib'.&lt;br /&gt;&lt;br /&gt;Eventually, following &lt;a href="http://www.perlmonks.org/?node_id=906239"&gt;a suggestion of Khen1950fx&lt;/a&gt; on &lt;a href="http://www.perlmonks.org/"&gt;PerlMonks&lt;/a&gt;, I began having some success installing Perl modules. I installed them in the order he recommended:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"Test::Harness",&lt;br /&gt;"Test::More",&lt;br /&gt;"Test::Number::Delta",&lt;br /&gt;"File::Spec",&lt;br /&gt;"Pod::Man",&lt;br /&gt;"Pod::Simple",&lt;br /&gt;"Text::Wrap",&lt;br /&gt;"Pod::Escapes",&lt;br /&gt;"ExtUtils::MakeMaker",&lt;br /&gt;"ExtUtils::PkgConfig",&lt;br /&gt;"ExtUtils::Depends",&lt;br /&gt;"Cairo",&lt;br /&gt;"Glib",&lt;br /&gt;"Pango",&lt;br /&gt;"Gtk2"&lt;br /&gt;&lt;/pre&gt;I installed each module with 'cpan install Module::Name' in a command prompt window, except where there were problems. A few of them were already installed, but most were new to my system.&lt;br /&gt;&lt;br /&gt;All went well until the Cairo module. With this I had trouble because I had initially installed the 64bit version of the Gtk all-in-one bundle (I have 64bit Windows). The linker failed to link against the 64bit library, reporting many undefined symbols. I removed the 64bit bundle and installed the 32bit bundle, after which the Cairo module built without problems. Thanks to Mithaldu and TonyC over at #win32 at mibbit.com for helping me solve this problem.&lt;br /&gt;&lt;br /&gt;Glib had a test failure - only one on a new feature, so I did a force install.&lt;br /&gt;&lt;br /&gt;Pango wasn't linking against the Cairo library, reporting several unresolved symbols:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Running Mkbootstrap for Pango ()&lt;br /&gt;C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e chmod -- 644 Pango.bs&lt;br /&gt;C:\strawberry\perl\bin\perl.exe -MExtUtils::Mksymlists \&lt;br /&gt;     -e "Mksymlists('NAME'=&gt;\"Pango\", 'DLBASE' =&gt; 'Pango', 'DL_FUNCS' =&gt; { Pang&lt;br /&gt;o=&gt;[] }, 'FUNCLIST' =&gt; [q[newSVPangoRectangle], q[SvPangoRectangle], q[gtk2perl_&lt;br /&gt;pango_attribute_get_type], q[gtk2perl_pango_attribute_register_custom_type], q[g&lt;br /&gt;tk2perl_pango_attr_iterator_get_type], q[gtk2perl_pango_layout_iter_get_type], q&lt;br /&gt;[gtk2perl_pango_layout_line_get_type], q[gtk2perl_pango_script_iter_get_type]],&lt;br /&gt;'IMPORTS' =&gt; {  }, 'DL_VARS' =&gt; []);"&lt;br /&gt;dlltool --def Pango.def --output-exp dll.exp&lt;br /&gt;[ LD blib\arch\auto\Pango\Pango.dll ]&lt;br /&gt;xs/PangoCairo.o:PangoCairo.c:(.text+0xaa6): undefined reference to `cairo_refere&lt;br /&gt;nce'&lt;br /&gt;xs/PangoCairo.o:PangoCairo.c:(.text+0xf7d): undefined reference to `cairo_font_o&lt;br /&gt;ptions_copy'&lt;br /&gt;xs/PangoCairo.o:PangoCairo.c:(.text+0x2042): undefined reference to `cairo_scale&lt;br /&gt;d_font_reference'&lt;br /&gt;collect2: ld returned 1 exit status&lt;br /&gt;dmake.EXE:  Error code 129, while making 'blib\arch\auto\Pango\Pango.dll'&lt;br /&gt;  XAOC/Pango-1.223.tar.gz&lt;br /&gt;  C:\strawberry\c\bin\dmake.EXE -- NOT OK&lt;br /&gt;Failed during this command:&lt;br /&gt; XAOC/Pango-1.223.tar.gz                      : make NO&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;I had to hack the Makefile for this one. I ran cpan interactively and did a 'make Pango', then 'look Pango' to drop into the build directory. I edited the Makefile, adding 'C:\GTK\lib\libcairo.dll.a' to the start of the list of libraries assigned to the EXTRALIBS and LDLOADLIBS variables, then ran 'dmake' and 'dmake test'. Note: 'dmake' not 'make'. I don't know what the difference is other than 'dmake' works and 'make' doesn't. Finally, with all tests run successfully, I installed with 'dmake install', then exited the sub-shell and cpan - all done with Pango.&lt;br /&gt;&lt;br /&gt;Then the Perl Gtk2 module install failed:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;dlltool --def Gtk2.def --output-exp dll.exp&lt;br /&gt;[ LD blib\arch\auto\Gtk2\Gtk2.dll ]&lt;br /&gt;xs/GtkPrintContext.o:GtkPrintContext.c:(.text+0x1542): undefined reference to `c&lt;br /&gt;airo_reference'&lt;br /&gt;xs/GdkCairo.o:GdkCairo.c:(.text+0x6f2): undefined reference to `cairo_pattern_re&lt;br /&gt;ference'&lt;br /&gt;xs/GdkCairo.o:GdkCairo.c:(.text+0x8e3): undefined reference to `cairo_surface_re&lt;br /&gt;ference'&lt;br /&gt;xs/GdkCairo.o:GdkCairo.c:(.text+0x11ba): undefined reference to `cairo_rectangle&lt;br /&gt;'&lt;br /&gt;collect2: ld returned 1 exit status&lt;br /&gt;dmake.EXE:  Error code 129, while making 'blib\arch\auto\Gtk2\Gtk2.dll'&lt;br /&gt;  XAOC/Gtk2-1.242.tar.gz&lt;br /&gt;  C:\strawberry\c\bin\dmake.EXE -- NOT OK&lt;br /&gt;Failed during this command:&lt;br /&gt; XAOC/Gtk2-1.242.tar.gz                       : make NO&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;This looks familiar. Again, interactive cpan, make then look and edit the Makefile to add C:\GTK\lib\libcairo.dll.a to EXTRALIBS and LDLOADLIBS, after which dmake ran to successful completion, but dmake test gave errors:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;C:\strawberry\cpan\build\Gtk2-1.242-wKFYdS&gt;dmake test&lt;br /&gt;C:\strawberry\perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0,&lt;br /&gt;'blib\lib', 'blib\arch')" t/*.t&lt;br /&gt;t/00.Gtk2.t ........................ 1/44 # Testing Gtk2 1.242&lt;br /&gt;#    Running against gtk+ 2.24.10&lt;br /&gt;#   Compiled against gtk+ 2.24.10&lt;br /&gt;#               and pango 1.29.4&lt;br /&gt;t/00.Gtk2.t ........................ ok&lt;br /&gt;t/01.GtkWindow.t ................... ok&lt;br /&gt;t/02.GtkContainer.t ................ ok&lt;br /&gt;t/Gdk.t ............................ 1/17 Gdk-WARNING **: gdk_set_sm_client_id b&lt;br /&gt;lub at t/Gdk.t line 62.&lt;br /&gt;Gdk-WARNING **: gdk_set_sm_client_id NULL at t/Gdk.t line 63.&lt;br /&gt;t/Gdk.t ............................ ok&lt;br /&gt;t/GdkCairo.t ....................... ok&lt;br /&gt;t/GdkColor.t ....................... 1/18 Gdk-WARNING **: gdkcolor-win32.c:110:&lt;br /&gt;DeleteObject failed: The operation completed successfully..&lt;br /&gt;t/GdkColor.t ....................... ok&lt;br /&gt;t/GdkCursor.t ...................... ok&lt;br /&gt;t/GdkDisplay.t ..................... 1/24 Gdk-WARNING **: gdk_display_get_defaul&lt;br /&gt;t_group not yet implemented at t/GdkDisplay.t line 67.&lt;br /&gt;&lt;br /&gt;#   Failed test at t/GdkDisplay.t line 77.&lt;br /&gt;#          got: ''&lt;br /&gt;#     expected: '1'&lt;br /&gt;# Looks like you failed 1 test of 24.&lt;br /&gt;t/GdkDisplay.t ..................... Dubious, test returned 1 (wstat 256, 0x100)&lt;br /&gt;&lt;br /&gt;Failed 1/24 subtests&lt;br /&gt;        (less 3 skipped subtests: 20 okay)&lt;br /&gt;t/GdkDisplayManager.t .............. ok&lt;br /&gt;t/GdkDnd.t ......................... ok&lt;br /&gt;t/GdkDrawable.t .................... ok&lt;br /&gt;t/GdkEvent.t ....................... ok&lt;br /&gt;t/GdkGC.t .......................... ok&lt;br /&gt;t/GdkImage.t .......................&lt;br /&gt;t/GdkImage.t ....................... 1/23 #   Failed test 'get_image_type()'&lt;br /&gt;#   at t/GdkImage.t line 10.&lt;br /&gt;#          got: 'shared'&lt;br /&gt;#     expected: 'normal'&lt;br /&gt;Gdk-WARNING **: gdkcolor-win32.c:110: DeleteObject failed: The operation complet&lt;br /&gt;ed successfully. at t/GdkImage.t line 56.&lt;br /&gt;# Looks like you failed 1 test of 23.&lt;br /&gt;t/GdkImage.t ....................... Dubious, test returned 1 (wstat 256, 0x100)&lt;br /&gt;&lt;br /&gt;Failed 1/23 subtests&lt;br /&gt;t/GdkInput.t ....................... ok&lt;br /&gt;t/GdkKeys.t ........................ ok&lt;br /&gt;t/GdkPango.t ....................... ok&lt;br /&gt;t/GdkPixbuf.t ...................... ok&lt;br /&gt;t/GdkPixbufLoader.t ................ ok&lt;br /&gt;t/GdkPixbufSimpleAnim.t ............ ok&lt;br /&gt;t/GdkPixmap.t ...................... ok&lt;br /&gt;t/GdkProperty.t .................... 1/49 Gdk-CRITICAL **: gdk_property_change:&lt;br /&gt;assertion `type != GDK_TARGET_STRING' failed at t/GdkProperty.t line 38.&lt;br /&gt;Gdk-CRITICAL **: gdk_property_change: assertion `type != GDK_TARGET_STRING' fail&lt;br /&gt;ed at t/GdkProperty.t line 40.&lt;br /&gt;Gdk-WARNING **: gdk_property_change: General case not implemented at t/GdkProper&lt;br /&gt;ty.t line 42.&lt;br /&gt;Gdk-WARNING **: gdk_property_change: General case not implemented at t/GdkProper&lt;br /&gt;ty.t line 44.&lt;br /&gt;t/GdkProperty.t .................... ok&lt;br /&gt;t/GdkRegion.t ...................... ok&lt;br /&gt;t/GdkRgb.t ......................... ok&lt;br /&gt;t/GdkScreen.t ...................... ok&lt;br /&gt;t/GdkSelection.t ................... ok&lt;br /&gt;t/GdkVisual.t ...................... ok&lt;br /&gt;t/GdkWindow.t ...................... 1/58 Gdk-WARNING **: gdk_window_set_group n&lt;br /&gt;ot implemented at t/GdkWindow.t line 277.&lt;br /&gt;Gdk-CRITICAL **: gdk_window_set_opacity: assertion `WINDOW_IS_TOPLEVEL (window)'&lt;br /&gt; failed at t/GdkWindow.t line 316.&lt;br /&gt;t/GdkWindow.t ...................... ok&lt;br /&gt;t/GdkX11.t ......................... ok&lt;br /&gt;t/GtkAboutDialog.t ................. ok&lt;br /&gt;t/GtkAccelGroup.t .................. ok&lt;br /&gt;t/GtkAccelLabel.t .................. ok&lt;br /&gt;t/GtkAccelMap.t .................... ok&lt;br /&gt;t/GtkAction.t ...................... ok&lt;br /&gt;t/GtkActionGroup.t ................. ok&lt;br /&gt;t/GtkActivatable.t ................. ok&lt;br /&gt;t/GtkAdjustment.t .................. ok&lt;br /&gt;t/GtkAlignment.t ................... ok&lt;br /&gt;t/GtkArrow.t ....................... ok&lt;br /&gt;t/GtkAspectFrame.t ................. ok&lt;br /&gt;t/GtkAssistant.t ................... ok&lt;br /&gt;t/GtkBin.t ......................... ok&lt;br /&gt;t/GtkBindings.t .................... ok&lt;br /&gt;t/GtkBox.t ......................... ok&lt;br /&gt;t/GtkBuildable.t ................... ok&lt;br /&gt;t/GtkBuildableIface.t .............. ok&lt;br /&gt;t/GtkBuilder.t ..................... ok&lt;br /&gt;t/GtkButton.t ...................... ok&lt;br /&gt;t/GtkButtonBox.t ................... ok&lt;br /&gt;t/GtkCalendar.t .................... ok&lt;br /&gt;t/GtkCellEditable.t ................ GLib-GObject-CRITICAL **: Object class Edit&lt;br /&gt;ableTest doesn't implement property 'editing-canceled' from interface 'GtkCellEd&lt;br /&gt;itable' at C:/strawberry/perl/site/lib/Glib/Object/Subclass.pm line 233.&lt;br /&gt;t/GtkCellEditable.t ................ ok&lt;br /&gt;t/GtkCellLayout.t .................. ok&lt;br /&gt;t/GtkCellLayoutIface.t ............. ok&lt;br /&gt;t/GtkCellRenderer.t ................ ok&lt;br /&gt;t/GtkCellRendererAccel.t ........... ok&lt;br /&gt;t/GtkCellRendererCombo.t ........... ok&lt;br /&gt;t/GtkCellRendererIface-Chaining.t .. ok&lt;br /&gt;t/GtkCellRendererPixbuf.t .......... ok&lt;br /&gt;t/GtkCellRendererProgress.t ........ ok&lt;br /&gt;t/GtkCellRendererSpin.t ............ ok&lt;br /&gt;t/GtkCellRendererSpinner.t ......... ok&lt;br /&gt;t/GtkCellRendererText.t ............ ok&lt;br /&gt;t/GtkCellRendererToggle.t .......... ok&lt;br /&gt;t/GtkCellView.t .................... ok&lt;br /&gt;t/GtkCheckButton.t ................. ok&lt;br /&gt;t/GtkCheckMenuItem.t ............... ok&lt;br /&gt;t/GtkClipboard.t ................... ok&lt;br /&gt;t/GtkColorButton.t ................. ok&lt;br /&gt;t/GtkColorSelection.t .............. ok&lt;br /&gt;t/GtkColorSelectionDialog.t ........ ok&lt;br /&gt;t/GtkCombo.t ....................... ok&lt;br /&gt;t/GtkComboBox.t .................... ok&lt;br /&gt;t/GtkComboBoxEntry.t ............... ok&lt;br /&gt;t/GtkCurve.t ....................... ok&lt;br /&gt;t/GtkDialog.t ...................... 1/33 Gtk-CRITICAL **: gtk_box_reorder_child&lt;br /&gt;: assertion `GTK_IS_WIDGET (child)' failed at t/GtkDialog.t line 91.&lt;br /&gt;Gtk-CRITICAL **: gtk_box_reorder_child: assertion `GTK_IS_WIDGET (child)' failed&lt;br /&gt; at t/GtkDialog.t line 91.&lt;br /&gt;Gtk-CRITICAL **: gtk_box_reorder_child: assertion `GTK_IS_WIDGET (child)' failed&lt;br /&gt; at t/GtkDialog.t line 92.&lt;br /&gt;Gtk-CRITICAL **: gtk_box_reorder_child: assertion `GTK_IS_WIDGET (child)' failed&lt;br /&gt; at t/GtkDialog.t line 92.&lt;br /&gt;Gtk-CRITICAL **: gtk_box_reorder_child: assertion `GTK_IS_WIDGET (child)' failed&lt;br /&gt; at t/GtkDialog.t line 92.&lt;br /&gt;Gtk-CRITICAL **: gtk_box_reorder_child: assertion `GTK_IS_WIDGET (child)' failed&lt;br /&gt; at t/GtkDialog.t line 92.&lt;br /&gt;t/GtkDialog.t ...................... ok&lt;br /&gt;t/GtkDnd.t ......................... 1/6 Gdk-CRITICAL **: gdk_window_get_screen:&lt;br /&gt; assertion `GDK_IS_WINDOW (window)' failed at t/GtkDnd.t line 55.&lt;br /&gt;Gtk-CRITICAL **: gtk_drag_set_icon_pixmap: assertion `!mask || gdk_window_get_sc&lt;br /&gt;reen (mask) == screen' failed at t/GtkDnd.t line 55.&lt;br /&gt;Gtk-WARNING **: Could not find the icon 'gtk-add'. The 'hicolor' theme&lt;br /&gt;was not found either, perhaps you need to install it.&lt;br /&gt;You can get a copy from:&lt;br /&gt;        http://icon-theme.freedesktop.org/releases at t/GtkDnd.t line 65.&lt;br /&gt;Gtk-WARNING **: Cannot load drag icon from icon name gtk-add at t/GtkDnd.t line&lt;br /&gt;65.&lt;br /&gt;t/GtkDnd.t ......................... ok&lt;br /&gt;t/GtkDrawingArea.t ................. ok&lt;br /&gt;t/GtkEditable.t .................... ok&lt;br /&gt;t/GtkEntry.t ....................... ok&lt;br /&gt;t/GtkEntryBuffer.t ................. ok&lt;br /&gt;t/GtkEntryCompletion.t ............. ok&lt;br /&gt;t/GtkEventBox.t .................... ok&lt;br /&gt;t/GtkExpander.t .................... ok&lt;br /&gt;t/GtkFileChooser.t ................. skipped: this test is unreliable&lt;br /&gt;t/GtkFileChooserButton.t ........... ok&lt;br /&gt;t/GtkFileChooserDialog.t ........... ok&lt;br /&gt;t/GtkFileChooserWidget.t ........... ok&lt;br /&gt;t/GtkFileFilter.t .................. ok&lt;br /&gt;t/GtkFileSelection.t ............... ok&lt;br /&gt;t/GtkFixed.t ....................... ok&lt;br /&gt;t/GtkFontButton.t .................. ok&lt;br /&gt;t/GtkFontSelection.t ............... ok&lt;br /&gt;t/GtkFrame.t ....................... ok&lt;br /&gt;t/GtkGammaCurve.t .................. ok&lt;br /&gt;t/GtkGC.t .......................... ok&lt;br /&gt;t/GtkHandleBox.t ................... ok&lt;br /&gt;t/GtkHBox.t ........................ ok&lt;br /&gt;t/GtkHButtonBox.t .................. ok&lt;br /&gt;t/GtkHPaned.t ...................... ok&lt;br /&gt;t/GtkHRuler.t ...................... ok&lt;br /&gt;t/GtkHScale.t ...................... ok&lt;br /&gt;t/GtkHScrollbar.t .................. ok&lt;br /&gt;t/GtkHSeparator.t .................. ok&lt;br /&gt;t/GtkHSV.t ......................... ok&lt;br /&gt;t/GtkIconFactory.t ................. ok&lt;br /&gt;t/GtkIconTheme.t ................... 1/17 Gtk-WARNING **: Could not find the ico&lt;br /&gt;n 'stock_edit'. The 'hicolor' theme&lt;br /&gt;was not found either, perhaps you need to install it.&lt;br /&gt;You can get a copy from:&lt;br /&gt;        http://icon-theme.freedesktop.org/releases at t/GtkIconTheme.t line 26.&lt;br /&gt;t/GtkIconTheme.t ................... ok&lt;br /&gt;t/GtkIconView.t .................... ok&lt;br /&gt;t/GtkImage.t ....................... ok&lt;br /&gt;t/GtkImageMenuItem.t ............... ok&lt;br /&gt;t/GtkIMContext.t ................... ok&lt;br /&gt;t/GtkInfoBar.t ..................... ok&lt;br /&gt;t/GtkInputDialog.t ................. ok&lt;br /&gt;t/GtkInvisible.t ................... ok&lt;br /&gt;t/GtkItemFactory.t ................. ok&lt;br /&gt;t/GtkLabel.t ....................... ok&lt;br /&gt;t/GtkLayout.t ...................... ok&lt;br /&gt;t/GtkLinkButton.t .................. ok&lt;br /&gt;t/GtkListStore.t ................... ok&lt;br /&gt;t/GtkMenu.t ........................ ok&lt;br /&gt;t/GtkMenuBar.t ..................... ok&lt;br /&gt;t/GtkMenuItem.t .................... ok&lt;br /&gt;t/GtkMenuShell.t ................... ok&lt;br /&gt;t/GtkMenuToolButton.t .............. ok&lt;br /&gt;t/GtkMessageDialog.t ............... ok&lt;br /&gt;t/GtkMisc.t ........................ ok&lt;br /&gt;t/GtkNotebook.t .................... ok&lt;br /&gt;t/GtkObject.t ...................... ok&lt;br /&gt;t/GtkOffscreenWindow.t ............. ok&lt;br /&gt;t/GtkOptionMenu.t .................. ok&lt;br /&gt;t/GtkOrientable.t .................. ok&lt;br /&gt;t/GtkPageSetup.t ................... ok&lt;br /&gt;t/GtkPaned.t ....................... ok&lt;br /&gt;t/GtkPaperSize.t ................... ok&lt;br /&gt;t/GtkPrintContext.t ................ ok&lt;br /&gt;t/GtkPrintOperation.t .............. ok&lt;br /&gt;t/GtkPrintOperationPreview.t ....... ok&lt;br /&gt;t/GtkPrintSettings.t ............... ok&lt;br /&gt;t/GtkProgressBar.t ................. ok&lt;br /&gt;t/GtkRadioAction.t ................. ok&lt;br /&gt;t/GtkRadioButton.t ................. ok&lt;br /&gt;t/GtkRadioMenuItem.t ............... ok&lt;br /&gt;t/GtkRadioToolButton.t ............. ok&lt;br /&gt;t/GtkRange.t ....................... ok&lt;br /&gt;t/GtkRc.t .......................... ok&lt;br /&gt;t/GtkRecentAction.t ................ ok&lt;br /&gt;t/GtkRecentChooser.t ............... ok&lt;br /&gt;t/GtkRecentChooserDialog.t ......... ok&lt;br /&gt;t/GtkRecentChooserMenu.t ........... ok&lt;br /&gt;t/GtkRecentChooserWidget.t ......... ok&lt;br /&gt;t/GtkRecentFilter.t ................ ok&lt;br /&gt;t/GtkRecentManager.t ............... 1/36 Gtk-WARNING **: Could not find the ico&lt;br /&gt;n 'stock_edit'. The 'hicolor' theme&lt;br /&gt;was not found either, perhaps you need to install it.&lt;br /&gt;You can get a copy from:&lt;br /&gt;        http://icon-theme.freedesktop.org/releases at t/GtkRecentManager.t line&lt;br /&gt;45.&lt;br /&gt;t/GtkRecentManager.t ............... ok&lt;br /&gt;t/GtkRuler.t ....................... ok&lt;br /&gt;t/GtkScale.t ....................... ok&lt;br /&gt;t/GtkScaleButton.t ................. ok&lt;br /&gt;t/GtkScrolledWindow.t .............. ok&lt;br /&gt;t/GtkSelection.t ................... ok&lt;br /&gt;t/GtkSeparatorMenuItem.t ........... ok&lt;br /&gt;t/GtkSeparatorToolItem.t ........... ok&lt;br /&gt;t/GtkShow.t ........................ skipped: can only test interactively&lt;br /&gt;t/GtkSimpleList.t .................. ok&lt;br /&gt;t/GtkSimpleMenu.t .................. ok&lt;br /&gt;t/GtkSizeGroup.t ................... ok&lt;br /&gt;t/GtkSocket-GtkPlug.t .............. skipped: not appliciable on win32&lt;br /&gt;t/GtkSpinButton.t .................. ok&lt;br /&gt;t/GtkSpinner.t ..................... ok&lt;br /&gt;t/GtkStatusbar.t ................... ok&lt;br /&gt;t/GtkStatusIcon.t .................. 1/37 Gtk-WARNING **: Could not find the ico&lt;br /&gt;n 'stock_edit'. The 'hicolor' theme&lt;br /&gt;was not found either, perhaps you need to install it.&lt;br /&gt;You can get a copy from:&lt;br /&gt;        http://icon-theme.freedesktop.org/releases at t/GtkStatusIcon.t line 60.&lt;br /&gt;&lt;br /&gt;t/GtkStatusIcon.t .................. ok&lt;br /&gt;t/GtkStock.t ....................... ok&lt;br /&gt;t/GtkStyle.t ....................... 1/125 Gdk-WARNING **: gdkdrawable-win32.c:6&lt;br /&gt;41: SelectObject failed: The operation completed successfully. at t/GtkStyle.t l&lt;br /&gt;ine 77.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:644: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 77.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:711: MaskBlt failed: The operation completed&lt;br /&gt; successfully. at t/GtkStyle.t line 77.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:714: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 77.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:715: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 77.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:641: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 78.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:644: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 78.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:711: MaskBlt failed: The operation completed&lt;br /&gt; successfully. at t/GtkStyle.t line 78.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:714: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 78.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:715: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 78.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:641: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 81.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:644: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 81.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:711: MaskBlt failed: The operation completed&lt;br /&gt; successfully. at t/GtkStyle.t line 81.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:714: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 81.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:715: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 81.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:641: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 82.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:644: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 82.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:711: MaskBlt failed: The operation completed&lt;br /&gt; successfully. at t/GtkStyle.t line 82.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:714: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 82.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:715: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 82.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:641: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 84.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:644: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 84.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:711: MaskBlt failed: The operation completed&lt;br /&gt; successfully. at t/GtkStyle.t line 84.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:714: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 84.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:715: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 84.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:641: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 90.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:644: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 90.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:711: MaskBlt failed: The operation completed&lt;br /&gt; successfully. at t/GtkStyle.t line 90.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:714: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 90.&lt;br /&gt;Gdk-WARNING **: gdkdrawable-win32.c:715: SelectObject failed: The operation comp&lt;br /&gt;leted successfully. at t/GtkStyle.t line 90.&lt;br /&gt;t/GtkStyle.t ....................... ok&lt;br /&gt;t/GtkTable.t ....................... ok&lt;br /&gt;t/GtkTearoffMenuItem.t ............. ok&lt;br /&gt;t/GtkTextBuffer.t .................. ok&lt;br /&gt;t/GtkTextBufferRichText.t .......... ok&lt;br /&gt;t/GtkTextChildAnchor.t ............. ok&lt;br /&gt;t/GtkTextIter.t .................... ok&lt;br /&gt;t/GtkTextMark.t .................... ok&lt;br /&gt;t/GtkTextTag.t ..................... ok&lt;br /&gt;t/GtkTextTagTable.t ................ ok&lt;br /&gt;t/GtkTextView.t .................... ok&lt;br /&gt;t/GtkToggleAction.t ................ ok&lt;br /&gt;t/GtkToggleButton.t ................ ok&lt;br /&gt;t/GtkToggleToolButton.t ............ ok&lt;br /&gt;t/GtkToolbar.t ..................... ok&lt;br /&gt;t/GtkToolButton.t .................. ok&lt;br /&gt;t/GtkToolItem.t .................... ok&lt;br /&gt;t/GtkToolItemGroup.t ............... ok&lt;br /&gt;t/GtkToolPalette.t ................. ok&lt;br /&gt;t/GtkToolShell.t ................... ok&lt;br /&gt;t/GtkTooltip.t ..................... ok&lt;br /&gt;t/GtkTooltips.t .................... ok&lt;br /&gt;t/GtkTreeDnd.t ..................... ok&lt;br /&gt;t/GtkTreeModel.t ................... ok&lt;br /&gt;t/GtkTreeModelFilter.t ............. ok&lt;br /&gt;t/GtkTreeModelIface.t .............. ok&lt;br /&gt;t/GtkTreeModelSort.t ............... ok&lt;br /&gt;t/GtkTreeSelection.t ............... ok&lt;br /&gt;t/GtkTreeSortable.t ................ ok&lt;br /&gt;t/GtkTreeStore.t ................... ok&lt;br /&gt;t/GtkTreeView-Dnd.t ................ skipped: this test is interactive&lt;br /&gt;t/GtkTreeView.t .................... ok&lt;br /&gt;t/GtkUIManager.t ................... ok&lt;br /&gt;t/GtkVBox.t ........................ ok&lt;br /&gt;t/GtkVButtonBox.t .................. ok&lt;br /&gt;t/GtkViewport.t .................... ok&lt;br /&gt;t/GtkVolumeButton.t ................ ok&lt;br /&gt;t/GtkVPaned.t ...................... ok&lt;br /&gt;t/GtkVRuler.t ...................... ok&lt;br /&gt;t/GtkVScale.t ...................... ok&lt;br /&gt;t/GtkVScrollbar.t .................. ok&lt;br /&gt;t/GtkVSeparator.t .................. ok&lt;br /&gt;t/GtkWidget.t ...................... ok&lt;br /&gt;t/pango-compat.t ................... ok&lt;br /&gt;t/PangoAttributes.t ................ ok&lt;br /&gt;t/PangoCairo.t ..................... ok&lt;br /&gt;t/PangoContext.t ................... ok&lt;br /&gt;t/PangoFont.t ...................... ok&lt;br /&gt;t/PangoFontMap.t ................... ok&lt;br /&gt;t/PangoFontset.t ................... ok&lt;br /&gt;t/PangoGravity.t ................... ok&lt;br /&gt;t/PangoLayout.t .................... ok&lt;br /&gt;t/PangoMatrix.t .................... ok&lt;br /&gt;t/PangoRenderer.t .................. ok&lt;br /&gt;t/PangoScript.t .................... ok&lt;br /&gt;t/PangoTabs.t ...................... ok&lt;br /&gt;t/PangoTypes.t ..................... ok&lt;br /&gt;t/set-scroll-adjustments-signal.t .. ok&lt;br /&gt;t/signal-chaining.t ................ ok&lt;br /&gt;t/tied-objects.t ................... ok&lt;br /&gt;t/version-checks.t ................. ok&lt;br /&gt;&lt;br /&gt;Test Summary Report&lt;br /&gt;-------------------&lt;br /&gt;t/GdkDisplay.t                   (Wstat: 256 Tests: 24 Failed: 1)&lt;br /&gt;  Failed test:  20&lt;br /&gt;  Non-zero exit status: 1&lt;br /&gt;t/GdkImage.t                     (Wstat: 256 Tests: 23 Failed: 1)&lt;br /&gt;  Failed test:  1&lt;br /&gt;  Non-zero exit status: 1&lt;br /&gt;Files=229, Tests=5068, 43 wallclock secs ( 2.86 usr +  0.72 sys =  3.57 CPU)&lt;br /&gt;Result: FAIL&lt;br /&gt;Failed 2/229 test programs. 2/5068 subtests failed.&lt;br /&gt;dmake:  Error code 255, while making 'test_dynamic'&lt;br /&gt;&lt;/pre&gt;There were only two failures reported (but several suspicous messages along the way). I don't know how to solve them and found nothing in a brief perusal of Google search results, so I installed anyway and hope for the best.&lt;br /&gt;&lt;br /&gt;After all this, I ran gmusicbrowser.pl and the GUI came up!! Now all I have to do is get it to make some noise!!&lt;br /&gt;&lt;br /&gt;I loaded up my music library with no obvious problem, but when I tried to play a track nothing happened (or maybe there was an error, I foget exactly what happened). The problem was that there was no audio configured or, more correctly, icecast server was configured and nothing else available.&lt;br /&gt;&lt;br /&gt;I installed mpg123. There is a windows binary available. I got the 32bit binary and put it in C:\Program Files (x86)\mpg123, then added this folder to the path environment variable. I was then able to play mp3 files with mpg123, so expect gmusicbrowser can too. I started it up and checked the audio settings but mpg123/ogg123/flac123 was still greyed out. Then I noticed that it is mpg321 NOT mpg123. I didn't find an mpg321 binary for windows, so I had a look at how to get gmusicbrowser to run mpg123.&lt;br /&gt;&lt;br /&gt;gmusicbrowser_123.pm seems to be the relevant file. I added 'mpg123' as a command for mp3 files in %cmdname. Tried again and no luck. Then I changed the path separator in the init sub from ':' to ';' (only a quick and dirty to test - need a better solution than this), and tried again. The mpg321/ogg123/flac123 was now available.&lt;br /&gt;&lt;br /&gt;So, I selected the mpg321/ogg123/flac123 audio device and tried to play a track, but it reported that it couldn't. So, down in sub Play I added a branch for mpg123, and finally was able to play a track.&lt;br /&gt;&lt;br /&gt;But, while the track played the gmusicbrowser GUI was not responding. And when the track finished perl crashed (so says Windows). So, there are more puzzles to solve...&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-5680259585766954549?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/5680259585766954549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=5680259585766954549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5680259585766954549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5680259585766954549'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2012/02/gmusicbrowser-on-windows7.html' title='gmusicbrowser on Windows7'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-7965016932086235756</id><published>2011-11-24T18:03:00.000-08:00</published><updated>2011-11-24T18:03:08.135-08:00</updated><title type='text'>Perl CGI on IIS</title><content type='html'>This is just a note to myself, as I tend to forget how to do this...&lt;br /&gt;&lt;br /&gt;Install the IIS CGI module: Control Panel, Programs and Features, Turn Windows Features On or Off...&lt;br /&gt;&lt;br /&gt;Enable CGI in IIS:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Open IIS Manager&lt;/li&gt;&lt;li&gt;Select server&lt;/li&gt;&lt;li&gt;Double click ISAPI and CGI Restrictions&lt;/li&gt;&lt;li&gt;Click Edit Feature Settins...&lt;/li&gt;&lt;li&gt;Check Allow unspecified CGI modules (or enter the specific ones you want)&lt;/li&gt;&lt;/ul&gt;Set handler mappings:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Select site&lt;/li&gt;&lt;li&gt;Open Handler Mappings&lt;/li&gt;&lt;li&gt;request path: *.pl&lt;/li&gt;&lt;li&gt;executable: C:\strawberry\perl\bin\perl.exe "%s" %s&lt;/li&gt;&lt;li&gt;name: CGI script&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-7965016932086235756?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/7965016932086235756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=7965016932086235756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7965016932086235756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7965016932086235756'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2011/11/perl-cgi-on-iis.html' title='Perl CGI on IIS'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-306071203214116174</id><published>2011-10-17T15:22:00.000-07:00</published><updated>2011-10-17T19:57:10.937-07:00</updated><title type='text'>WRVS4400N v2 VPN configuration</title><content type='html'>I have a WRVS4400N V2 Wireless-N Gigabit Security Router with VPN from Cisco Small Business.&lt;br /&gt;&lt;br /&gt;This box has many features but they do not include an ADSL interface. For that I have a Linksys AG300 DSL Modem / Router.&lt;br /&gt;&lt;br /&gt;What I couldn't find documentation on is how to configure these two devices to be able to establish a VPN connection from the Internet. But, after much trial and error I have it working.&lt;br /&gt;&lt;br /&gt;The AG300 has been serving our office LAN for several years and I didn't want to disrupt any existing configuration or services.&lt;br /&gt;&lt;br /&gt;I connected the WAN port of the WRVS4400N to a port on our LAN - via a switch to one of the AG300 LAN ports. The WRVS4400N WAN port picked up an IP on our LAN from the DHCP server on the AG300.&lt;br /&gt;&lt;br /&gt;I set the WAN port MTU configuration to Manual (Setup, WAN) and MTU size to 1000. This on the basis that the VPN traffic will be tunnelled so the MTU better be less than 1500. 1000 is no doubt lower than necessary but I didn't want failure for the sake of a few bytes. I can tune it up later.&lt;br /&gt;&lt;br /&gt;I set the timezone and enabled daylight savings time, with the default NTP server(s).&lt;br /&gt;&lt;br /&gt;I set up the wireless network, though this is probably irrelevant at this point. My testing was all with wired systems. All I did was set an SSID Name for SSID1 (Wireless, Basic Settings), and set security mode to WPA2-Personal Mixed and a Shared Secret (Wireless, Security Settings).&lt;br /&gt;&lt;br /&gt;IPSec VPN I left disabled (default).&lt;br /&gt;&lt;br /&gt;I created one VPN Client Account: a username and password and left Allow User to Change Password at default: no.&lt;br /&gt;&lt;br /&gt;I generated a certificate and exported for client.&lt;br /&gt;&lt;br /&gt;I changed the admin account password.&lt;br /&gt;&lt;br /&gt;I did all this from a laptop plugged into one of the LAN ports on the WRVS4400N. The laptop picked up an IP from the DHCP server on the WRVS4400N on the default 192.168.1.0/24 network.&lt;br /&gt;&lt;br /&gt;I then downloaded and installed the QuickVPN client from &lt;a href="http://www.cisco.com/en/US/prod/routers/quick_vpn.html"&gt;http://www.cisco.com/en/US/prod/routers/quick_vpn.html&lt;/a&gt;. I was using a laptop running Windows 7 64bit for testing, so I downloaded &lt;a href="http://tools.cisco.com/support/downloads/pub/Model.x?mdfid=282414016" target="_blank"&gt;WRVS4400N Wireless-N Gigabit Security Router - VPN V2.0&lt;/a&gt;. I ran setup as administrator and accepted all defaults. The laptop was in a workgroup, not a domain member on our LAN.&lt;br /&gt;&lt;br /&gt;I copied the WRVS4400N certificate to the QuickVPN folder (C:\Program Files (x86)\Cisco Small Business\QuickVPN Client.&lt;br /&gt;&lt;br /&gt;I connected the test client (with QuickVPN) to our internal LAN and configured a QuickVPN profile to access the WRVS4400N directly (ie at its internal WAN port address, thus not traversing our Internet DSL modem / router). This connected successfully and I was able to RDP to a test system on the LAN side of the WRVS4400N - success!!! of a sort.&lt;br /&gt;&lt;br /&gt;Next I created a new QuickVPN profile, the same as the first except for specifying the external address of the AG300 (i.e. our public / Internet IP address). I tried to connect and this failed.&lt;br /&gt;&lt;br /&gt;The failure wasn't too surprising. There was nothing on the AG300 that would allow the connection attempts to reach the WRVS4400N WAN port. Unfortunately, the WRVS4400N documentation said nothing other than to configure our DSL router / modem according to instructions from our ISP and our ISP knows nothing of the WRVS4400N, VPNs or anything else they don't supply and almost nothing about what they do supply, so I didn't even bother calling them.&lt;br /&gt;&lt;br /&gt;After some searching I found a post (https://supportforums.cisco.com/thread/2108785) indicating that some ports should be opened on the DSL modem / router and that this sometimes works, though it is an unsupported configuration (cryptic comment about there should only be one gateway). Anyway, I added ports 443, 500, 4500 and 60443, all TCP, to the port forwarding list on the AG300, all forwarded to the WRVS4400N WAN interface, but still no luck.&lt;br /&gt;&lt;br /&gt;Then I got out the sniffer and compared the successful internal connection with the failing external connection and noted that the internal connection had an exchange on UDP port 500 and the failing one had inbound packets to that port but no replies. So, I forwarded UDP port 500 as well and finally got a VPN connection via the external interface of the AG300. Success at last!! I had almost given up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-306071203214116174?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/306071203214116174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=306071203214116174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/306071203214116174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/306071203214116174'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2011/10/wrvs4400n-v2-vpn-configuration.html' title='WRVS4400N v2 VPN configuration'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-8140705727797550065</id><published>2011-05-21T14:09:00.000-07:00</published><updated>2011-05-21T14:10:18.658-07:00</updated><title type='text'>Doc Watson - Deep River Blues</title><content type='html'>I'm trying to learn Deep River Blues, as played by Doc Watson and others. There are lots of great videos on YouTube, including:&lt;br /&gt;&lt;br /&gt;http://www.youtube.com/watch?v=cE2swkx9WXE&amp;amp;feature=related&lt;br /&gt;&lt;br /&gt;http://www.folkways.si.edu/albumdetails.aspx?itemid=3105&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-8140705727797550065?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/8140705727797550065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=8140705727797550065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/8140705727797550065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/8140705727797550065'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2011/05/doc-watson-deep-river-blues.html' title='Doc Watson - Deep River Blues'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-2380116310735568636</id><published>2011-05-15T17:24:00.000-07:00</published><updated>2011-05-15T20:55:51.772-07:00</updated><title type='text'>Ewan Dobson is awesome</title><content type='html'>I just stumbled on YouTube videos of &lt;a href="http://www.youtube.com/watch?v=eXqPYte8tvc"&gt;Ewan Dobson&lt;/a&gt; - fingerpicking acoustic guitar. worth a listen if you haven't heard him.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-2380116310735568636?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/2380116310735568636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=2380116310735568636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2380116310735568636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2380116310735568636'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2011/05/ewan-dobson-is-awesome.html' title='Ewan Dobson is awesome'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-1456535825850572714</id><published>2011-04-16T12:54:00.000-07:00</published><updated>2011-04-16T13:01:30.488-07:00</updated><title type='text'>Competitiveness Vs Productivity</title><content type='html'>I was reading a series of articles on competitiveness, with a focus on declining US competitiveness: &lt;a href="http://www.computerworld.com/s/article/9215810/America_s_tech_decline_A_reading_guide_?taxonomyId=213&amp;amp;pageNumber=1"&gt;America's tech decline: A reading guide&lt;/a&gt;, and it occurred to me that a focus on competitiveness may be misguided, and that a focus on productivity might provide better guidance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The focus on competitiveness identifies winners and losers. It creates a context in which local relative advantage is preferred over global absolute advantage. Monopolies are favoured, to capture benefit locally, despite their reducing the total benefit obtained from the set of resources monopolized. Actions which decrease the competitiveness as others are promoted as legitimate means to "win" the competition.&lt;br /&gt;&lt;br /&gt;A focus on productivity, on the other hand, would admit the possibility that we can all be winners. Decreasing productivity in other areas would, generally, not increase local productivity. Therefore, there would be less incentive to use resources sub-optimally.&lt;br /&gt;&lt;br /&gt;There are ample and inevitable reasons for competition. World population is increasing rapidly while the supply of many primary resources is limited. Without increases in global productivity, global population growth cannot be supported. Current trends suggest a deteriorating situation for most people, with only those who are ruthlessly competitive being able to improve their situation. There is no shortage of people who are so competitive, and there is no morality in large corporate bodies - the corporations are far more ruthless and competitive than any of the individuals.&lt;br /&gt;&lt;br /&gt;A focus on productivity would suggest curbing some of the more immoral behaviours of large organizations and promote an effective balance between socialism and central control on the one hand, and individualism, capitalism and free markets on the other hand. Extremes in either direction have been unstable and ultimately undesired in the long run, with all the best societies having a mixture of capitalism and socialism, personal liberty and central management.&lt;br /&gt;&lt;br /&gt;If we can't have sufficient for everyone, we are destined for strife and conflict, potentially and, as resources become more limited, almost certainly brutal. If we can have ample for everyone, then there will be no compelling need for competition, and only our basic character (competitiveness, greed and envy are very common traits) to cause such strife. To have ample for everyone, we must increase productivity and distribute what is produced so everyone has a sufficient (ample) share.&lt;br /&gt;&lt;br /&gt;Promoting competitiveness and making others lose may yield fantastic local benefits in the short term, but in the long run it may not be the best strategy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-1456535825850572714?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/1456535825850572714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=1456535825850572714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/1456535825850572714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/1456535825850572714'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2011/04/competitiveness-vs-productivity.html' title='Competitiveness Vs Productivity'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-5000634069124528482</id><published>2011-03-24T23:23:00.000-07:00</published><updated>2011-03-24T23:23:30.513-07:00</updated><title type='text'>Render SQL Server Reporting Services report as a PDF file</title><content type='html'>We have various reports developed using SQL Server Reporting Services. In some cases we want to provide our users with PDF versions of the reports without them having to navigate the Report Server website. For these purposes, it is convenient to produce a PDF file and send it by email or save it to a share.&lt;br /&gt;&lt;br /&gt;I thought it would be easy, but it wasn't so. It took many hours to get a program working that would access our report server and save a report to disk as a PDF file. The following program worked:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Module Module1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sub Main()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim format As String = "PDF"&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim fileName As String = "C:\temp\test.pdf"&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim reportPath As String = "/Project1/Report1"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Prepare Render arguments&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim myCredentials As New NetworkCredential(userName:="USER", password:="password")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim rs As ReportExecutionService = New ReportExecutionService()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs.Credentials = System.Net.CredentialCache.DefaultCredentials&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim historyID As String = Nothing&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim deviceInfo As String = Nothing&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim extension As String = Nothing&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim encoding As String = Nothing&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim mimeType As String = Nothing&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim warnings() As Warning = Nothing&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim streamIDs() As String = Nothing&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim results() As Byte&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs.LoadReport(reportPath, historyID)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; results = rs.Render(format, deviceInfo, extension, _&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mimeType, encoding, warnings, streamIDs)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Open a file stream and write out the report&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim stream As FileStream = File.OpenWrite(fileName)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stream.Write(results, 0, results.Length)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stream.Close()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;End Module&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I compiled this program using Visual Studio 2010 Express edition. The report server is part of SQL Server 2008 Enterprise Edition.&lt;br /&gt;&lt;br /&gt;Within Visual Studio I had to create a reference to a web resource. This is a bit tricky... I don't have VS in front of me now, but I opened the project settings, selected resources (or something like that) and drilled down through advanced settings until, way at the bottom of one of the pop-up screens, there was an "Add Web Resource" button (or something like that). There I entered the name of our report server. Something like:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;http://server/reportserver/reportexecution2005.asmx?wsdl&lt;/blockquote&gt;I don't know if the "?wsdl" is necessary. Some posts said it was and this is the URL I was using when I finally got it working. More to test, if I wasn't already many hours behind schedule.&lt;br /&gt;&lt;br /&gt;This (reportexecution2005.asmx) works despite the server being SQL Server 2008 and Visual Studio being 2010. All the sample VB code I could find used something called "rs" without declaring or initializing it. None of those posts said anything about where it came from or what versions of tools the code worked with. I stumbled upon ReportExecutionService() quite by accident, and cobbled together working declaration and initialization by trial and error and by following a few hints here and there on the Internet.&lt;br /&gt;&lt;br /&gt;There is lots left to learn and understand, but in the mean time, the above is working for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-5000634069124528482?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/5000634069124528482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=5000634069124528482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5000634069124528482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5000634069124528482'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2011/03/render-sql-server-reporting-services.html' title='Render SQL Server Reporting Services report as a PDF file'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-4439692703181402381</id><published>2011-02-18T01:43:00.000-08:00</published><updated>2011-02-18T01:43:33.953-08:00</updated><title type='text'>perl/tk mega-widget configuration</title><content type='html'>perldoc Tk::ConfigSpec says if where is set to SELF then "apply configure to the core widget" but it doesn't explain how to make it work. I started with a skeleton widget:&lt;br /&gt;&lt;blockquote&gt;package Tk::Test;&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;&lt;br /&gt;use base 'Tk::Frame';&lt;br /&gt;Tk::Widget-&amp;gt;Construct('Test');&lt;br /&gt;&lt;br /&gt;sub ClassInit {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($class,$mw) = @_;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $class-&amp;gt;SUPER::ClassInit($mw);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub Populate {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($self, $args) = @_;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $self-&amp;gt;SUPER::Populate($args);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $self-&amp;gt;ConfigSpecs(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -xxx&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; [ 'SELF', 'xxx', 'Xxx', 'x' ],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;1;&lt;br /&gt;&lt;/blockquote&gt;But when I created one, setting option -xxx, I got the following error:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Tk::Error: Can't set -xxx to `XX' for Tk::Test=HASH(0x93d5420): unknown option "-xxx" at /usr/lib/perl5/Tk/Configure.pm line 47.&lt;br /&gt;&lt;/blockquote&gt;Eventually I figured out that I need a configure subroutine in my widget. It gets called after Populate has run, passed the -xxx option and its value. My initial widget was inheriting its configure subroutine from Tk::Frame and that configure didn't accept the -xxx option (and why wouldn't it).&lt;br /&gt;&lt;br /&gt;I added a configure subroutine...&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;package Tk::Test;&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;use Data::Dumper;&lt;br /&gt;&lt;br /&gt;use base 'Tk::Frame';&lt;br /&gt;Tk::Widget-&amp;gt;Construct('Test');&lt;br /&gt;&lt;br /&gt;sub ClassInit {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($class,$mw) = @_;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $class-&amp;gt;SUPER::ClassInit($mw);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub Populate {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($self, $args) = @_;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $self-&amp;gt;SUPER::Populate($args);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $self-&amp;gt;ConfigSpecs(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -xxx&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; [ 'SELF', 'xxx', 'Xxx', 'x' ],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub configure {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my ($self, @args) = @_;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "configure: " . Dumper(\@args);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;1;&lt;br /&gt;&lt;/blockquote&gt;With this, the error was gone. Now all I have to do is learn how to write a configure sub properly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-4439692703181402381?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/4439692703181402381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=4439692703181402381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4439692703181402381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4439692703181402381'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2011/02/perltk-mega-widget-configuration.html' title='perl/tk mega-widget configuration'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-477077258216844456</id><published>2010-06-23T09:36:00.000-07:00</published><updated>2010-06-23T12:26:25.384-07:00</updated><title type='text'>Software Patents in New Zealand</title><content type='html'>Steve Lundberg does not represent me. He claims to represent the supply side of the New Zealand Information and Communications Technology industry (see the note at the end of &lt;a href="http://webcache.googleusercontent.com/search?q=cache:wzDfoNHqC5YJ:www.patents4software.com/%3Fp%3D72"&gt;http://webcache.googleusercontent.com/search?q=cache:wzDfoNHqC5YJ:www.patents4software.com/%3Fp%3D72&lt;/a&gt;) and he advocates for software patents in New Zealand. But I have been writing software for over 30 years and I don't want software patents in New Zealand or anywhere. Steve Lundberg does not represent me.&lt;br /&gt;&lt;br /&gt;It is interesting, and I am sure no coincidence, that the U-turn of the New Zealand government on the issue of software patents was leaked by a US based patent lawyer. I suspect Mr Lundberg works for US interests, not the interests of New Zealand. No doubt, those interests he is working for are interested in extracting as much value as they can from New Zealand. He is very pleased with the U-turn, and that is all the more reason for everyone in New Zealand to be very displeased.&lt;br /&gt;&lt;br /&gt;Software patents are the tools of large global companies that can afford patent portfolios and legal teams and use them to eliminate competition. They provide little prospect of benefit and great risk of harm to New Zealand (or anywhere or anyone else except for those few mamoth companies that will never have anything but sales offices, lawyers and "tax" collecters here in New Zealand). Consider the absurdity of patents that have been issued in the United States and Europe. Consider the reality of a small company defending a patent and, worse, the reality of a small company defending itself against claims of patent violation. Consider that the largest companies in New Zealand are worth less than lunch for the legal teams of the big players in the software industry.&lt;br /&gt;&lt;br /&gt;Even if one admits merit in software patents (I don't, but many do) then they should be rejected on the basis that the cost of mediating and enforcing the privileges granted by patents exceeds the value of what is patented. It is fundamentally unjust that defending oneself against even frivolous claims of patent infringement can bankrupt a person or business. Even if patents do encourage development that benefits society, this benefit must be weighed against the lost benefit of development that is discouraged by the risk of costs associated with defending oneself against claims of patent infringement.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.againstmonopoly.org/"&gt;http://www.againstmonopoly.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.swpat.org/wiki/Software_patents_wiki:_home_page"&gt;http://en.swpat.org/wiki/Software_patents_wiki:_home_page&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://unlimited.co.nz/unlimited.nsf/technology/patent-protection-for-software-needs-to-go"&gt;http://unlimited.co.nz/unlimited.nsf/technology/patent-protection-for-software-needs-to-go&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-477077258216844456?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/477077258216844456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=477077258216844456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/477077258216844456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/477077258216844456'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2010/06/software-patents-in-new-zealand.html' title='Software Patents in New Zealand'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-93793880528587766</id><published>2010-06-18T18:05:00.000-07:00</published><updated>2010-06-24T09:51:20.189-07:00</updated><title type='text'>gmusicbrowser on Debian Lenny</title><content type='html'>I have Debian Lenny on my laptop and I wanted gmusicbrowser. There isn't a package to install this on Lenny, but there is one to install it on sid (&lt;a href="http://packages.debian.org/sid/sound/gmusicbrowser"&gt;http://packages.debian.org/sid/sound/gmusicbrowser&lt;/a&gt;) and this package installed without error on lenny and, so far, is running without any problems.&lt;br /&gt;&lt;br /&gt;To install it, download the .deb file from the above noted page (follow the "all" link under Architecture in the table at the bottom of the page, pick a mirror and download), then install with:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;dpkg -i gmusicbrowser_1.0.2-2_all.deb&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This may not be the best way to install it, but it's easy enough and it seems to have worked OK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-93793880528587766?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/93793880528587766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=93793880528587766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/93793880528587766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/93793880528587766'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2010/06/gmusicbrowser-on-debian-lenny.html' title='gmusicbrowser on Debian Lenny'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-3802326607463280951</id><published>2010-05-21T04:11:00.000-07:00</published><updated>2010-05-21T04:56:57.414-07:00</updated><title type='text'>Hunt the Wumpus</title><content type='html'>I started trying to understand how upstart works recently and feel like I'm in a maze of twisty little passages, all alike. The documentation and configuration files provide many disjoint bits of information but there is nothing to knit it all together into an understandable pattern. Figuring out what the connections are between all these little bits is as challenging now and finding the Wumpus was then. And, according to &lt;a href="https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/557177"&gt;https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/557177&lt;/a&gt;, even more dangerous. I know I can read the source, but it really shouldn't be so hard.&lt;br /&gt;&lt;br /&gt;I decided to replace Ubuntu with something that doesn't use upstart, but a little research gives the impression that upstart has already been adopted by many of the major distributions and is being considered by many more. It seemed I would have to live in fear of the Wumpus, lost in a maze of twisty little passages, too scared to shoot my crooked little arrows.&lt;br /&gt;&lt;br /&gt;Then I came across Lennart Poetterin's blog about systemd: &lt;a href="http://0pointer.de/blog/projects/systemd.html"&gt;http://0pointer.de/blog/projects/systemd.html&lt;/a&gt;. It is refreshingly lucid and leaves me feeling there is hope after all. The concepts are expressed simply, making them understandable. The big picture is presented, providing a context in which the technical details can be understood and related. It feels like a solution and something I would like to work with.&lt;br /&gt;&lt;br /&gt;This is in sharp contrast to upstart, which feels like manifold layers of obscure complexity heaped on the problem with little or no hints how it works, except in its parts. The original problem is out of sight and soon forgotten as one struggles to find where all the events come from and go to to knit the bits (jobs) together.&lt;br /&gt;&lt;br /&gt;So, bravo to Lennart. I know it is early days for systemd but based on what I have seen I would be very pleased if it supplanted upstart and even the very comfortable old Sys V init scripts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-3802326607463280951?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/3802326607463280951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=3802326607463280951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/3802326607463280951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/3802326607463280951'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2010/05/hunt-wumpus.html' title='Hunt the Wumpus'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-4942399054005206260</id><published>2009-10-12T20:03:00.000-07:00</published><updated>2009-10-12T20:07:46.686-07:00</updated><title type='text'>Brady Harris</title><content type='html'>I downloaded &lt;a href="http://www.jamendo.com/en/album/40248"&gt;North Hollywood Skyline&lt;/a&gt; from &lt;a href="http://www.jamendo.com/en/"&gt;Jamendo &lt;/a&gt;and I love it - smooth!&lt;br /&gt;&lt;br /&gt;He also has &lt;a href="http://www.myspace.com/bradyharris"&gt;a page on Myspace&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Well worth a listen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-4942399054005206260?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/4942399054005206260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=4942399054005206260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4942399054005206260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4942399054005206260'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/10/brady-harris.html' title='Brady Harris'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-5997342396509611858</id><published>2009-07-21T10:00:00.000-07:00</published><updated>2009-07-21T10:15:20.614-07:00</updated><title type='text'>Shino</title><content type='html'>Not the &lt;a href="http://en.wikipedia.org/wiki/Shino_%28glaze%29"&gt;glaze &lt;/a&gt;and not &lt;a href="http://en.wikipedia.org/wiki/Shino"&gt;one of the anime characters or other people listed on Wikipedia&lt;/a&gt; - but &lt;a href="http://www.jamendo.com/en/artist/Shino_%282%29"&gt;the musician&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is a great album. I love his voice.&lt;br /&gt;&lt;br /&gt;I'm a fan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-5997342396509611858?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/5997342396509611858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=5997342396509611858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5997342396509611858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5997342396509611858'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/07/shino.html' title='Shino'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-8054119230491847044</id><published>2009-07-18T04:22:00.000-07:00</published><updated>2009-07-18T07:09:26.145-07:00</updated><title type='text'>Perl's sitecustomize.pl</title><content type='html'>Perl has an option to run sitecustomize.pl very early and regardless of what program is running.&lt;br /&gt;&lt;br /&gt;The Configure option to enable this is -Dusesitecustomize. See the INSTALL documentation that comes with the perl source for a brief description. It is not enabled by default.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://perldoc.perl.org/perlrun.html"&gt;perlrun &lt;/a&gt;for a brief description of how to prevent execution of this script, if it has been enabled. &lt;a href="http://www.nntp.perl.org/group/perl.perl5.porters/2007/10/msg129926.html"&gt;This P5P thread&lt;/a&gt; describes how it works.&lt;br /&gt;&lt;br /&gt;ActiveState perl may have this option enabled. It did, but I don't know if it does currently.&lt;br /&gt;&lt;br /&gt;Another option is to create a configuration module and use this module when running perl. For example, if you create CONF.pm you can invoke your program as: perl -MCONF program.pl. Alternatively, you can set the environment variable PERL5OPT to include "-MCONF", but note that this option may be processed too late if you are using other -M options on the command line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-8054119230491847044?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/8054119230491847044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=8054119230491847044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/8054119230491847044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/8054119230491847044'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/07/perls-sitecustomizepl.html' title='Perl&apos;s sitecustomize.pl'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-6857060715745366476</id><published>2009-07-10T15:54:00.000-07:00</published><updated>2009-07-10T16:11:08.057-07:00</updated><title type='text'>Of vim, view and swap files</title><content type='html'>The view command should run vim in read-only mode. In this mode, vim should not use a swap file. But sometimes, if I am editing a file and open the same file with view in another window, vim complains that the swap file already exists. What's going on?&lt;br /&gt;&lt;br /&gt;It turns out that vim does not always run without a swap file when in read only mode. If the file is large enough that more memory than maxmem or maxmemtot is required then a swap file is used even in read-only mode.&lt;br /&gt;&lt;br /&gt;On my system (CentOS 5.3 with 2GB RAM) both maxmem and maxmemtot default to 252KB. Many of the source files I edit are larger than this and, therefore, swap files are used even in read-only mode.&lt;br /&gt;&lt;br /&gt;By setting maxmem and maxmemtot to something larger, swap files can be avoided for larger files. For example, in your .vimrc file you can add:&lt;br /&gt;&lt;br /&gt;set maxmem=1024&lt;br /&gt;set maxmemtot=1024&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-6857060715745366476?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/6857060715745366476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=6857060715745366476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6857060715745366476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6857060715745366476'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/07/of-vim-view-and-swap-files.html' title='Of vim, view and swap files'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-4709200629051693654</id><published>2009-07-07T09:23:00.000-07:00</published><updated>2009-07-07T12:05:54.822-07:00</updated><title type='text'>Standards, Open and Otherwise</title><content type='html'>I was reading the &lt;a href="http://en.wikipedia.org/wiki/Open_standard"&gt;Wikipedia page on Open Standards&lt;/a&gt;. There certainly are a lot of definitions, and this is only one source. No doubt there are many other definitions. One might conclude that the phrase is only a vague suggestion.&lt;br /&gt;&lt;br /&gt;What we need is a standard definition of what an open standard is, so we can all agree to it, and, since it would be too ironic otherwise, I guess that should be an open standard definition of what an open standard is.&lt;br /&gt;&lt;br /&gt;Before worrying about what an open standard is, it might be good to determine what a standard is.  This is no easier. Wikipedia has a long &lt;a href="http://en.wikipedia.org/wiki/Standard_%28disambiguation%29"&gt;disambiguation page for "standard"&lt;/a&gt;. The Free Dictionary has &lt;a href="http://www.thefreedictionary.com/standard"&gt;a page of definitions for "standard"&lt;/a&gt;. There are all sorts of possibilities.&lt;br /&gt;&lt;br /&gt;Perhaps we should begin with something basic like: "I think, therefore I am". If we can derive meanings for standard and open standard from this, maybe we can get everyone to agree. The problem with this approach is that, it seems, no one has gotten beyond thinking, which may or may not prove that they are, at least to themselves: but nothing else has yet been derived to general satisfaction.&lt;br /&gt;&lt;br /&gt;This doesn't leave much alternative other than  providing a definition of the phrase with each use. So, if you see the terms standard or open standard used, don't make any assumptions about what they mean, get a definition of them from the user: this is the only way to know what the user means.&lt;br /&gt;&lt;br /&gt;"Open" is sexy. "Open" is good. "Open" is in. "Open" rocks. Lately, marketing types do  their best to associate "open" with whatever they are marketing. An "open standard" may simply be a standard that the promoter wants you to believe is good, sexy and in. Just as there are too many lawyers, there are too many marketers who have dedicated their lives to abusing language to subvert your decision making. Don't be sucked in. Read the fine print.&lt;br /&gt;&lt;br /&gt;My education and work experience are in engineering and IT. My interest in "standards" is in the context of qualifying things that will be used. Thus the definitions of "standard" that are most relevant to me, from those on the Free Dictionary page, are:&lt;br /&gt;&lt;blockquote&gt;An acknowledged measure of comparison for quantitative or qualitative value; a criterion&lt;/blockquote&gt;and&lt;br /&gt;&lt;blockquote&gt;An object that under specified conditions defines, represents, or records the magnitude of a unit.&lt;/blockquote&gt;and&lt;br /&gt;&lt;blockquote&gt;Something, such as a practice or a product, that is widely recognized or employed, especially because of its excellence.&lt;/blockquote&gt;and&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt; &lt;/b&gt; A degree or level of requirement, excellence, or attainment.&lt;/blockquote&gt;Actually, one of their most appealing (to me) definitions isn't in the definition section - it is in the description of the synonyms of "standard":&lt;br /&gt;&lt;blockquote&gt;a point of reference against which individuals are compared and evaluated&lt;/blockquote&gt;And, similarly, in the thesaurus section:&lt;br /&gt;&lt;blockquote&gt;a basis for comparison; a reference point against which other things can be evaluated&lt;/blockquote&gt;&lt;br /&gt;When I think of a "standard", this is what I am thinking of.&lt;br /&gt;&lt;br /&gt;To be of any use, a standard must be available to the person who is doing the comparison and evaluation. It doesn't have to be available to anyone else, though it may be. When procuring computers, I might define my own standards against which I will compare and evaluate all the candidate systems. I might do this very privately, without letting anyone know what my standards are. Or I might publish my standards in an RFP which I might make available to prospective system vendors subject to a non-disclosure agreement. Or I might publish my standards so that they are available to prospective vendors or others without restrictions on reproduction or use.&lt;br /&gt;&lt;br /&gt;Sometimes, two or more otherwise independent entities might agree to a common standard in order to achieve some consistency or compatibility. Many "standards" are published with the intent that others will use them. "Standards organizations" are organizations that specialize in producing such standards. Such organizations may do nothing else other than produce "standards".&lt;br /&gt;&lt;br /&gt;Standards may be published to be available to some group of entities. Access to the standard may be very restricted (e.g. I assume Coca Cola has a standard recipe that is available only to its manufacturers around the world - a closely guarded secret never to be disclosed to Pepsi) or unrestricted. Access to a published standard may be subject to entering into an agreement which limits rights to access, use or refer to the standard. The lawyers of proprietors and the law makers have developed diverse means for extracting value from property.&lt;br /&gt;&lt;br /&gt;So, what might an "open" standard be?&lt;br /&gt;&lt;br /&gt;In contrast, consider what a "proprietary" standard might be. Perhaps the definition of an "open" standard should preclude the promotion or promulgation of any proprietary interest. Proprietary interests are protected and promoted by means which are generally restrictive and compulsive: not what I think of as "open", generally.&lt;br /&gt;&lt;br /&gt;In conclusion, my definition of an "open standard" is:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;a standard which is not constrained by and does not incorporate, promote or promulgate any proprietary interest.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;There is a problem with this definition: in most countries any published standard will be subject to copyright which establishes an unavoidable proprietary interest in the publication and unavoidable proprietary constraints on use of the publication. Therefore there is no such thing as a published standard which is not constrained by proprietary interest, at least not until years later when the copyright expires. So, maybe this definition should be amended to:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;a published standard: which is not subject to copyright, or in which the copyright owner explicitly grants permission for anyone to reproduce and use the published standard without fee, royalty or other compensation, and which does not otherwise incorporate, promote or promulgate any proprietary interest.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-4709200629051693654?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/4709200629051693654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=4709200629051693654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4709200629051693654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4709200629051693654'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/07/standards-open-and-otherwise.html' title='Standards, Open and Otherwise'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-7268807010781290860</id><published>2009-07-03T09:23:00.000-07:00</published><updated>2009-07-03T09:37:29.332-07:00</updated><title type='text'>Little Programming Advice</title><content type='html'>I didn't, at first, understand the point of Urlich Drepper's article &lt;a href="http://udrepper.livejournal.com/10278.html"&gt;Little Programming Advice&lt;/a&gt;, because I didn't see where the conflict was between the variable length array and the alloca allocation. But then, I got it...&lt;br /&gt;&lt;br /&gt;The conflict arrises because both variable length arrays and alloca allocations are stack based: the stack is extended to make the required space, but variable length arrays are supposed to be limited to the block they are defined in which alloca allocations are supposed to persist until the subroutine they are made in is exited.&lt;br /&gt;&lt;br /&gt;The sample code is:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;{&lt;br /&gt; char arr[strlen(s)];&lt;br /&gt; fill_in(arr, s);&lt;br /&gt; s = strdupa(arr);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When the block containing the variable length array definition is entered the stack is extended to make space for the array. Presumably (the article doesn't say) this allocation is removed from the stack when the block is exited (it could also be that it is removed when the block is re-entered and when the subroutine is exited). The conflict arises when alloca is used to allocate another block on the stack because the alloca allocation must persist to the end of the subroutine. As the alloca allocation is above the variable length array allocation on the stack, the variable length array allocation can't be freed until after the alloca allocation is freed and this can't happen before the subroutine is exited. A new allocation could be made for the variable length array on every entry to the block, but then these would accumulate, which isn't supposed to happen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-7268807010781290860?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/7268807010781290860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=7268807010781290860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7268807010781290860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7268807010781290860'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/07/little-programming-advice.html' title='Little Programming Advice'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-2722875907975266779</id><published>2009-06-26T03:42:00.000-07:00</published><updated>2009-06-26T03:58:30.126-07:00</updated><title type='text'>Philips MCD708 Micro Theatre demo mode</title><content type='html'>If you have a Philips MCD708 Micro Theatre stuck in demo mode, you can turn off demo mode by setting the unit to standby mode (pressing STANDBY-ON on the unit or remote) then pressing "PRESET -" in the unit. While the unit is in standby, pressing "PRESET -" toggles it between DEMO ON and DEMO OFF.&lt;br /&gt;&lt;br /&gt;You can turn demo mode off from the remote also, but only if TUNER is selected, not if DVD or AUX are selected. Turn the system on, select TUNER then turn the unit to STANDBY, then press the "CH -" button on the remote.&lt;br /&gt;&lt;br /&gt;Because Philips left this information out of the manual and has nothing about this issue on-line where Google can find it, I wasted several hours pressing buttons until I happened upon the magic combination. If I could, I would return this poorly documented product and get my money back to buy something else. I will be reluctant to buy anything else from Philips.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-2722875907975266779?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/2722875907975266779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=2722875907975266779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2722875907975266779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2722875907975266779'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/philips-mcd708-micro-theatre-demo-mode.html' title='Philips MCD708 Micro Theatre demo mode'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-4479829045561572812</id><published>2009-06-24T22:07:00.000-07:00</published><updated>2009-06-25T02:18:38.533-07:00</updated><title type='text'>Linux Compatible Firmware</title><content type='html'>Many hardware vendors produce excellent hardware but do not make sufficient technical information about them available to allow their hardware to be used with Linux systems. This includes BIOS and other firmware on main boards and core chip sets.&lt;br /&gt;&lt;br /&gt;Until 2007 a consortium of vendors was working to improve this situation by producing a &lt;a href="http://linuxfirmwarekit.org/"&gt;Linux-ready Firmware Developer Kit&lt;/a&gt;, &lt;a href="http://lwn.net/Articles/233956/"&gt;according to an INTEL employee&lt;/a&gt; (see the comment by arjan).&lt;br /&gt;&lt;br /&gt;What has happened since 2007?&lt;br /&gt;&lt;br /&gt;There is a bit of an update from 2008 &lt;a href="http://www.coreboot.org/images/7/7b/Ward-vandewege-coreboot-talk-20080404-narrative.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And there is &lt;a href="http://www.coreboot.org/images/d/d1/Openefi.pdf"&gt;this&lt;/a&gt; comparing LinuxBIOS with EFI.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The UEFI standard defines a GUID Partition Table. This is proposed and somewhat used as a replacement for the traditional partition table.&lt;br /&gt;&lt;br /&gt;The traditional partition table is not well defined, it seems. There is some consistency between systems but also much inconsistency. Software interacting with partition tables includes BIOS and operating systems. Andries Brouwer has written a &lt;a href="http://www.win.tue.nl/%7Eaeb/partitions/partition_types.html"&gt;description of it&lt;/a&gt;. And here's &lt;a href="http://www.ata-atapi.com/hiwtab.html"&gt;another&lt;/a&gt; from ata-atapi.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-4479829045561572812?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/4479829045561572812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=4479829045561572812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4479829045561572812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4479829045561572812'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/linux-compatible-firmware.html' title='Linux Compatible Firmware'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-2367472728044511594</id><published>2009-06-24T21:44:00.001-07:00</published><updated>2009-06-24T22:01:49.021-07:00</updated><title type='text'>Trusted Computing</title><content type='html'>I read &lt;a href="http://www.cl.cam.ac.uk/users/rja14/tcpa-faq.html"&gt;this article on Trusted Computing&lt;/a&gt; over the past few days. It is from 2003 - six years ago.&lt;br /&gt;&lt;br /&gt;What has happened since then?&lt;br /&gt;&lt;br /&gt;It is hard to imagine that Trusted Computing will actually work. The worst case is that it does not work and it is bolstered by legal requirements to use it and prohibitions against anything that reduces its effectiveness. This would include prohibitions against investigations into how it works, its strengths and weaknesses and any alternatives such as already exist in the DMCA legislation in the US. This would also include prohibition of anything that could be used to investigate how Trusted Computing works and any communication of information about how it works. Such legislation has been proposed in other cases.&lt;br /&gt;&lt;br /&gt;The emperor may have no clothes, but that will be OK because it will be illegal to look at his clothes or communicate anything other than the official statements about his clothes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-2367472728044511594?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/2367472728044511594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=2367472728044511594' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2367472728044511594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2367472728044511594'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/trusted-computing.html' title='Trusted Computing'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-6056040463799659082</id><published>2009-06-21T19:50:00.000-07:00</published><updated>2009-06-23T03:24:15.541-07:00</updated><title type='text'>Linux commands I read about today</title><content type='html'>The losetup command is for managing loop devices. The loop device driver accesses regular files instead of physical devices. But, while they are block devices, you can't partition them like real block devices (i.e. disks). You can run fdisk but will have to tell it the number of cylinders, after which it will create a partition table for you, but there will be no devices created to access those partitions and attempt to reload the partition table (as fdisk does after writing it or with blockdev --rereadpt) fails with  &lt;span style="font-style: italic;"&gt;Invalid argument&lt;/span&gt;. &lt;a href="http://lists.samba.org/archive/linux/2004-December/012627.html"&gt;This email&lt;/a&gt; may be relevant and &lt;a href="http://www.wlug.org.nz/LoopDevice"&gt;this post&lt;/a&gt; has some further examples.&lt;br /&gt;&lt;br /&gt;The blockdev command is for calling select ioctl commands on block devices from the command line.&lt;br /&gt;&lt;br /&gt;The tc command can be used to add latency to loop devices (and lots else):&lt;br /&gt;&lt;br /&gt;&lt;acronym title="usually in /sbin/"&gt;tc&lt;/acronym&gt; qdisc add dev lo root handle 1:0 netem delay 20msec&lt;br /&gt;&lt;br /&gt;tc qdisc del dev lo root&lt;br /&gt;&lt;br /&gt;the loop device can be used to &lt;a href="http://wiki.edseek.com/guide:mount_loopback"&gt;access partitions in disk images&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Note that the NASA enhanced loop device is still available from ftp://ftp.hq.nasa.gov/pub/ig/ccd/enhanced_loopback/ but it is patches against a 2.4 kernel and has not been updated since 2004.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-6056040463799659082?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/6056040463799659082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=6056040463799659082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6056040463799659082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6056040463799659082'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/linux-commands-i-read-about-today.html' title='Linux commands I read about today'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-2429710489014817282</id><published>2009-06-11T22:01:00.000-07:00</published><updated>2009-06-12T02:47:53.315-07:00</updated><title type='text'>Telecom/Xtra blocks port 25</title><content type='html'>This isn't news - they have been blocking port 25 for a long time now. What's new for me is that, since switching from dial-up to broadband, the traffic is blocked despite my subscription to opt out of port 25 filtering. The opt out worked when I was on dial-up, even with a dynamic IP address.&lt;br /&gt;&lt;br /&gt;Now that I am on Telecom/Xtra broadband, they tell me the only way I will be able to connect to port 25 on any other than the Telecom/Xtra smtp servers is to subscribe for a static IP address, at an additional cost of $20/month - that's 40% of my connection fee.&lt;br /&gt;&lt;br /&gt;To make a long story short, I spent over an hour on the phone, mostly on hold, insisting that it should work. Eventually the support person gave up telling me there was nothing more he could do and escalated the call. A few hours later I had an email from technical support - they had reset their authentication cache for my account and asked me to reset my router.&lt;br /&gt;&lt;br /&gt;So, I reset my router and I can once again connect to remote SMTP servers.&lt;br /&gt;&lt;br /&gt;It shouldn't have taken so long, and if I didn't know IP and SMTP well enough to build their network for them I wouldn't have had the confidence to know they were wrong when they told me it couldn't be done. But I suppose those who don't know enough are very unlikely to need to connect to remote SMTP servers, so not much harm done from Telecom's perspective.&lt;br /&gt;&lt;br /&gt;In summary, it is still possible to connect to remote SMTP servers, even with Telecom/Xtra broadband service - as long as you have hours and patience to work through their helpdesk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-2429710489014817282?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/2429710489014817282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=2429710489014817282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2429710489014817282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2429710489014817282'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/telecomxtra-blocks-port-25.html' title='Telecom/Xtra blocks port 25'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-9009534924958577578</id><published>2009-06-11T19:33:00.000-07:00</published><updated>2009-06-11T19:49:26.413-07:00</updated><title type='text'>Shared mailbox</title><content type='html'>I got x11vnc working but so I can connect from my laptop running vista to my workstation running CentOS5. It works OK except that I can't cut and paste between applications on Vista and Thunderbird running on CentOS5. Cut and paste works for some other applications, but something is different with Thunderbird.&lt;br /&gt;&lt;br /&gt;I got vncserver (which is, I think, just an interface to control Xvnc - the vnc server built in to the X server) working also. Cut and paste works fine with this configuration, even with Thunderbird, but this only works with an X server on a virtual terminal - I can't use it to access and control the physical console. This is a nuisance because I often enough leave Thunderbird running on the workstation, then I can't start another copy of the second login.&lt;br /&gt;&lt;br /&gt;So, now I have set up fetchmail and dovecot. These seem quite popular and I got them working with very little difficulty. I don't know much about them yet - I have a lot to learn before I will be comfortable that I have set them up well. Like I don't even know if my communications are secure. But it's only on my local network, so no great worries yet.&lt;br /&gt;&lt;br /&gt;After a brief Google, I found the fetchmail configuration required to download messages from hotmail, where I have a test account. No problems here. The messages are delivered by SMTP to my local sendmail MTA and from there to my inbox.&lt;br /&gt;&lt;br /&gt;Another brief Google and I had the required configuration for dovecot: I added&lt;br /&gt;&lt;blockquote&gt;mail_location = mbox:~/Mail:INBOX=/var/mail/%u&lt;br /&gt;&lt;/blockquote&gt;to /etc/dovecot.conf. With this, dovecot finds incoming email in my incoming mailbox (where sendmail deposits it) and stores folders in ~/Mail, with each folder being one mbox format file. I don't see how to get it to find messages in ~/mbox, where my local mail client stores them after reading them from my inbox. No doubt there is a way but...&lt;br /&gt;&lt;br /&gt;Anyway, with these set up I tried connecting from Thunderbird: this was easy. I just created a new IMAP account, selected SSL and told it to connect to localhost. Bingo-bango I had access to my messages.&lt;br /&gt;&lt;br /&gt;Then I installed Thunderbird on my laptop and set up an equivalent account, but specifying my workstation as the server rather than localhost. I opened up inbound connection to TCP/143, from the local network only. And I now have access to my messages from my laptop.&lt;br /&gt;&lt;br /&gt;So now I can receive messages on either my laptop or workstation.&lt;br /&gt;&lt;br /&gt;Next, outbound...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-9009534924958577578?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/9009534924958577578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=9009534924958577578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/9009534924958577578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/9009534924958577578'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/shared-mailbox.html' title='Shared mailbox'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-7204039546572784961</id><published>2009-06-10T16:21:00.000-07:00</published><updated>2009-06-10T16:33:05.369-07:00</updated><title type='text'>CentOS5 display management</title><content type='html'>From the top...&lt;br /&gt;&lt;br /&gt;When the Linux kernel boots, the last thing it does is start the &lt;span style="font-style: italic;"&gt;init&lt;/span&gt; process. This process is the parent of all processes on the system. It creates processes according to the contents of its configuration file: /etc/inittab. You can read all about it in the manual pages for init and inittab.&lt;br /&gt;&lt;br /&gt;On a CentOS5 system with X Windows installed, /etc/inittab will include the following:&lt;br /&gt;&lt;blockquote&gt;# Run xdm in runlevel 5&lt;br /&gt;x:5:respawn:/etc/X11/prefdm -nodaemon&lt;/blockquote&gt;The first line is just a comment. The second causes init to run /etc/X11/prefdm whenever the system is running in runlevel 5 and to restart it if it terminates.&lt;br /&gt;&lt;br /&gt;The /etc/X11/prefdm script (it's just a shell script) reads the /etc/sysconfig/desktop file to determine which display manager is preferred: by reading the DISPLAYMANAGER variable set in that configuration file. If the variable is set and prefdm is able to, the specified display manager is run. Otherwise, first gdm, then kdm then xdm are tried.&lt;br /&gt;&lt;br /&gt;The /etc/X11/prefdm script runs display managers by &lt;span style="font-style: italic;"&gt;exec&lt;/span&gt;'ing them. Thus the display manager replaces the shell process running the script. If no display manager can run, then the script exits with exit status 1. Otherwise the display manager exits with whatever status it likes.&lt;br /&gt;&lt;br /&gt;When the script or the display manager it executed terminates, the init process runs the script again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-7204039546572784961?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/7204039546572784961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=7204039546572784961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7204039546572784961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7204039546572784961'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/centos5-display-management.html' title='CentOS5 display management'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-6370965105797786263</id><published>2009-06-10T14:06:00.000-07:00</published><updated>2009-06-10T14:16:09.557-07:00</updated><title type='text'>rhgb</title><content type='html'>The rhgb program (Red Hat Graphical Boot) displays messages from the boot scripts on an X Server display. There is no man page or other documentation installed with this program but it seems to be a standard part of Red Hat installations.&lt;br /&gt;&lt;br /&gt;The rhgb program is run if the boot parameters include rhgb. If you don't like rhgb remove this parameter from your boot parameter list (grub, lilo or whatever you use). You should then get all your boot messages appearing on a simple text display.&lt;br /&gt;&lt;br /&gt;There is no option to provide a detailed display by default. You can edit the boot scripts to force a detailed display, but rhgb will sometime make up its own mind and switch the display anyway - like when some script takes longer than 10 seconds to complete. So, unless you pepper your init scripts with "rhgb-client --details=yes", you won't necessarily see the details.&lt;br /&gt;&lt;br /&gt;Starting the X Server just takes more time when all you really want to do is boot.&lt;br /&gt;&lt;br /&gt;Displaying the text from the boot scripts in a graphical display really doesn't add any value to the boot process. Maybe some people find it more "friendly" because it hides "intimidating" messages. My advice is to turn it off.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-6370965105797786263?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/6370965105797786263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=6370965105797786263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6370965105797786263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6370965105797786263'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/rhgb.html' title='rhgb'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-3105247823485239410</id><published>2009-06-10T04:05:00.000-07:00</published><updated>2009-06-11T03:34:18.354-07:00</updated><title type='text'>x11vnc on CentOS5 with GDM</title><content type='html'>&lt;span style="font-family:times new roman;"&gt;Setting up x11vnc to allow remote login and control of the physical console on a CentOS5 system is easy.&lt;br /&gt;&lt;br /&gt;Install x11vnc (e.g. yum install x11vnc) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Create a GDM init script for display :0 (or whatever display you want to connect to). The default init script is /etc/gdm/Init/Default. You can copy this to a file named for the display you are using. On my system this is ':0'.&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:times new roman;"&gt;cp /etc/gdm/Init/Default /etc/gdm/Init/:0 &lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:times new roman;"&gt;Edit the new init script, adding the following down at the bottom, just before the exit: &lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-family:times new roman;"&gt;&lt;span style="font-size:85%;"&gt;x11vnc -bg -o /tmp/x11vnc.log -reopen -forever&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-family:times new roman;"&gt;Note: I had "-auth /var/gdm/:0.Xauth" option until Karl (see comments) suggested it wasn't necessary - it works fine without it. The -auth option isn't required in this case because the XAUTHORITY environment variable is already set when x11vnc is executed. If running x11vnc in some other context, it would be necessary to either set the XAUTHORITY environment variable or use the -auth option.&lt;br /&gt;&lt;br /&gt;The -bg option causes x11vnc to go to background instead of staying in the foreground until terminated. This allows GDM to carry on to do its thing.&lt;br /&gt;&lt;br /&gt;The -0 option specifies the path of a logfile.&lt;br /&gt;&lt;br /&gt;The -reopen option tells x11vnc to reconnect to the X server if the connection is broken, which it is after GDM completes login because the initial X server is terminated after login and a new X server is started as the logged in user.&lt;br /&gt;&lt;br /&gt;The -forever option tells x11vnc to continue running after termination of a VNC session. With this option it is possible to disconnect and then reconnect.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;For details of GDM see &lt;a href="http://library.gnome.org/admin/gdm/2.16/configuration.html.en"&gt;http://library.gnome.org/admin/gdm/2.16/configuration.html.en&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-3105247823485239410?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/3105247823485239410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=3105247823485239410' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/3105247823485239410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/3105247823485239410'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/x11vnc-on-centos5-with-gdm.html' title='x11vnc on CentOS5 with GDM'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-7032121997141040544</id><published>2009-06-09T21:34:00.000-07:00</published><updated>2009-06-09T22:28:24.392-07:00</updated><title type='text'>Windows Vista Sidebar Gadgets</title><content type='html'>I have a new laptop with Windows Vista pre-installed. I have avoided Vista for as long as possible but my old laptop died and it seems to be impossible to buy a new one with XP these days. Before I install Linux, I thought I would try out Vista for a while.&lt;br /&gt;&lt;br /&gt;One of the new features is the sidebar gadgets. I haven't seen them before, so I went to the Microsoft site to learn more about them. First I found marketing hype about how great they are, then I found http://vista.gallery.microsoft.com/vista/SideBar.aspx?mkt=en-nz. This page has downloads and links to information but all the links are to a "live.com" website. That site looks like some sort of social network / shareware distribution site.&lt;br /&gt;&lt;br /&gt;So I called Microsoft to find out where the documentation is and after a long conversation with the support analyst the best they could refer me to was end-user documentation. I explained that I am an IT professional and I need to know how to manage them in a corporate environment, to which they responded that I should search for some third party websites that have more information and suggestions how to tinker with the gadgets. So I explained again that I am an IT professional and I don't want to tinker with gadgets, I want to manage corporate desktops professionally. The analyst went away to search again and finally came back to say that the end user help pages is all the documentation that Microsoft has to offer and if I wanted more I would have to go to a third party.&lt;br /&gt;&lt;br /&gt;So, after all these years, the best desktop Microsoft has to offer is, from a corporate management perspective, undocumented. It gives me a sinking feeling.&lt;br /&gt;&lt;br /&gt;But wait... After much searching about the Microsoft link and following links here there and everywhere, I finally found a page that has some reasonably technical information:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://msdn.microsoft.com/en-nz/library/aa965850%28en-us,VS.85%29.aspx"&gt;http://msdn.microsoft.com/en-nz/library/aa965850(en-us,VS.85).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And another Microsoft page for those who want to tinker with gadgets&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163370.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc163370.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-7032121997141040544?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/7032121997141040544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=7032121997141040544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7032121997141040544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7032121997141040544'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/06/windows-vista-sidebar-gadgets.html' title='Windows Vista Sidebar Gadgets'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-5726815206091226210</id><published>2009-05-17T18:52:00.000-07:00</published><updated>2009-05-17T19:19:21.954-07:00</updated><title type='text'>HTML name and id tokens</title><content type='html'>&lt;p&gt;The HTML 4.01 spec says:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").&lt;/blockquote&gt;&lt;p&gt;But it also says:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Use id or name? Authors should consider the following issues when deciding whether to use id or name for an anchor name:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The id attribute can act as more than just an anchor name (e.g., style sheet selector, processing identifier, etc.).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some older user agents don't support anchors created with the id attribute.&lt;/li&gt;&lt;li&gt;The name attribute allows richer anchor names (with entities).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;p&gt;It is strange that name attributes are supposed to allow richer anchor names (with entities) when the none of the characters necessary for specifying entities, other than digits, are allowed in name tokens - the ampersand (&amp;amp;), without which one cannot specify an entity, is not allowed in a name token, nor a semicolon (;) nor a hash/pound (#).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Some browsers allow many characters other than those specified, including non-letter initial character, but not all. No doubt some browsers are attempting to conform strictly to the specification when they ignore anchors with disallowed characters in their name tokens.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-5726815206091226210?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/5726815206091226210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=5726815206091226210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5726815206091226210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5726815206091226210'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/05/html-name-and-id-tokens.html' title='HTML name and id tokens'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-348106451879045743</id><published>2009-05-14T15:43:00.000-07:00</published><updated>2009-05-14T18:19:12.567-07:00</updated><title type='text'>Demographics, Corporatization and Democracy</title><content type='html'>&lt;p&gt;Here is &lt;a href="http://www.youtube.com/watch?v=-w3meSupCME&amp;amp;feature=related"&gt;an interesting presentation on trends in demographics&lt;/a&gt;, with some discussion of their implications to prosperity and stability of countries around the world.&lt;/p&gt;&lt;p&gt;The world has never been a static place and the future is certain to be different from what we know today. Having grown up in a long period of peace and propsperity in "western" countries, it is easy to forget the preponderance of conflict and hardship in the overall human experience. It seems unlikely that the pervasive ease of life that I have known will continue much longer.&lt;/p&gt;&lt;p&gt;We are still in the early stages of global integration and corporatization. As global integration progresses, the significance of geographically based organizations declines. For example, in Europe, after many centuries of violent conflict, there is no longer enough concern in the geographically based nation states to continue the conflicts - European union better serves the corporations. The corporations already transcend nations. Their conflicts are in other realms than the geographic extents of nations. &lt;/p&gt;&lt;p&gt;National governments are of progressively less significance. Consider, for example, how many countries remain free to pass legislation independently on issues that affect the corporations. They are bound by economic necessity and international treaties and have progressively less independence as they become more integrated economically.&lt;/p&gt;&lt;p&gt;Corporations, on the other hand, are becoming ever more powerful. They are revising the laws of all nations to facilitate their objectives. They are powerful enough now to be able to subvert the democracy in even the most powerful and most dogmatically democratic countries. And they have long since disposed of democracy and independent local governments in less powerful countries in which they have an interest.&lt;/p&gt;&lt;p&gt;In the past 250 years, the struggle for democracy in national governments was won to a significant extent in several of the more powerful countries in the world. But the new powers, the corporations, are in no way democratic.&lt;/p&gt;&lt;p&gt;If you want to know how it will be, re-read Machiavelli's &lt;a href="http://en.wikipedia.org/wiki/The_Prince"&gt;The Prince&lt;/a&gt; and remember that the shareholders are the new princes. The nature of the conflict has changed, from military to economic, but the desire for power and the consequences of the struggles for power, for the general population, remain the same.&lt;/p&gt;&lt;p&gt;Very broad markets in consumer goods and services may be the last bastions of democracy in the new world. Unless democratic nations reverse the handover of power to international corporations, they will soon cease to yeild any significant power, after which their democratic nature will be irrelevant. &lt;/p&gt;&lt;p&gt;The rise of third world nations and cultures will not save the democracies - they are already un-democratic and easy prey for the corporations. &lt;/p&gt;&lt;p&gt;Religious fervor may be the only force that the corporations find difficult to overcome. But the concentration of power that is often associated with religious organizations makes them vulnerable to corruption, so even this is uncertain.&lt;/p&gt;&lt;p&gt;The corporations will continue to consolidate and amass power and wealth, until even the wealthiest nation states are unable to compete with them.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-348106451879045743?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/348106451879045743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=348106451879045743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/348106451879045743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/348106451879045743'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/05/demographics.html' title='Demographics, Corporatization and Democracy'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-6935942758641744450</id><published>2009-05-12T18:14:00.000-07:00</published><updated>2009-05-12T19:59:39.876-07:00</updated><title type='text'>Connections</title><content type='html'>&lt;p&gt;Please read &lt;a href="http://en.wikipedia.org/wiki/Bill_Joy"&gt;Bill Joy&lt;/a&gt;'s article in &lt;a href="http://www.wired.com/"&gt;Wired&lt;/a&gt;: &lt;a href="http://www.wired.com/wired/archive/8.04/joy_pr.html"&gt;Why the future doesn't need us&lt;/a&gt;. It is insightful, thought provoking and worthy of careful consideration. The issues he discusses should be of concern to everyone.&lt;/p&gt;&lt;p&gt;How I came to read the article today seems not unrelated to the concerns raised in it and increases rather than relieves my anxiety. In what follows, I will try to explain why.&lt;/p&gt;&lt;p&gt;Progress in understanding often comes from associating previously disjoint information. Combining facts or ideas that previously had never been considered together can lead to new insights, understanding and abilities - new knowledge that is more significant than might be expected.&lt;/p&gt;&lt;p&gt;When I was in university, I worked for a professor with several degrees in the biological and physical sciences. He told me, in effect, that the most interesting, capable and impressive people he had ever met or expected to meet all had multi-disciplinary backgrounds and it was this diversity of their knowledge and experience which allowed them to bring together what had previously been separate, producing new knowledge and insight.&lt;/p&gt;&lt;p&gt;Today, I read &lt;a href="http://www.perlmonks.org/?node_id=763623"&gt;a humorous posting&lt;/a&gt; regarding &lt;a href="http://www.perlmonks.org/?node_id=763612"&gt;a question&lt;/a&gt; from a somewhat naieve user of computers that, among other things, included a link to a picture of &lt;a href="http://www.wired.com/wired/archive/8.04/joy_pr.html"&gt;Bill Joy&lt;/a&gt;. Somewhat embarassingly, but as is increasingly frequent as I get older, I was certain that I knew who Bill Joy was, but couldn't recall anything specific, so I googled him. Of course, &lt;a href="http://en.wikipedia.org/wiki/Main_Page"&gt;Wikipedia&lt;/a&gt; has &lt;a href="http://www.wired.com/wired/archive/8.04/joy_pr.html"&gt;an article on him&lt;/a&gt;, which I read and which jogged my memory.&lt;/p&gt;&lt;p&gt;That article had an intriguing link: &lt;a href="http://en.wikipedia.org/wiki/Why_the_future_doesn't_need_us"&gt;"Why the future doesn't need us"&lt;/a&gt;. - another Wikipedia page with a link to &lt;a href="http://www.wired.com/wired/archive/8.04/joy_pr.html"&gt;the Wired article of the same name&lt;/a&gt;. So, having some time to spare today, I followed the link and read the article.&lt;/p&gt;&lt;p&gt;Please read the article, but to paraphrase and condense extremely, I will say that the essence of the article is that there are risks associated with the advancement of our knowledge and technology; that the risks are growing as the power of our technology increases; and that, with the speed at which knowledge and technology are advancing, these risks are now or will very soon be so great that we need to be more cautious in our further development and use of knowledge and technology.&lt;/p&gt;&lt;p&gt;My reading the article today is related to all this, and compunds my concerns arroused by the article, because I began reading about a problem in programming and ended up, only a few minutes later, reading an article that I think is of quite profound importance. Had it not been for the Internet and Google and Wikipedia, I never would have come across these very different bits of information in the same day and almost certainly wouldn't have associated them with each other in any way, yet now, they are associated for me, and the gap between them is as easily bridged by others as it was by me. I am no one special.&lt;/p&gt;&lt;p&gt;In this case, the combination of ideas does not result in anything that will change the world, but the linking and association of information that is inherent in the Internet, Google, Wikipedia, PerlMonks, Wired (the sites I browsed in this case), and many other similar resources, is staggering and profoundly significant. While many of the links created are trivial, no doubt there are many nascent links of profound importance, easily but not yet followed or anticipated, and without precedent in anyones consideration.&lt;/p&gt;&lt;p&gt;The Internet exposes a vast resource of information and the bits of information made accessible by it are more significant as a part of the whole than they would be separately because they can be so easily related and combined, even by people like me without particularly significant education or connections or experience.&lt;/p&gt;&lt;p&gt;There was a time when individuals made discoveries of great import. Then, for a while, it seemed, only relatively large and well funded teams of people could make much progress in extending our collective knowledge and ability. But the Internet empowers everyone to learn and access a vast diversity of information. It seems again that individuals have at their disposal the means to learn and significantly advance our understanding.&lt;/p&gt;&lt;p&gt;Why is this troubling? A basic principle of security that I have been taught and learned to appreciate through the years is that security can be improved if systems can be created such that several people would have to collude over a period of time in order to successfully subvert the system to their own ends. The risk of several "bad apples" successfully working together in secrecy is lower than the risk of one "bad apple" working in secrecy. The need for large teams and substantial financial resources in order to significantly advance knowledge and technology provided some assurance that the effort would not long remain secret. And exposure would allow a broader consideration and control of the activity.&lt;/p&gt;&lt;p&gt;Maybe I was just naieve to think that there was much impedement to individuals making breakthroughs in isolation, but certianly doing so is made easier by the Internet.&lt;/p&gt;&lt;p&gt;Thus, the Internet and the information and tools it provides access to, increase the risk that someone will accidentally or thoughtlessly or maliciously develop something of great harm to us all, as individuals and as a society.&lt;/p&gt;&lt;p&gt;I am concerned most of all because of my experience of the profound inability of people, on average and in general, to successfully manage even very simple things successfully for long and with reasonable consideration and accommodation of the needs and interests of the broader community. Just think of your own experience of errors and accidents. How many of them, in hindsight, seem like they could have and should have been avoided. Yet we continue, collectivley, to make them.&lt;/p&gt;&lt;p&gt;It is somewhat amazing, given all the "accidents" and ignorantly self-interested and intentionally malicious or destructive acts that are committed so frequently, that we have survived as long as we have with the technology we already have. As our power, and in particular the power of individuals and small groups, continues to increase, how long can it be before something harmful on a grand scale occurs?&lt;/p&gt;&lt;p&gt;Compounding my worries, I came across &lt;a href="http://www.johnperkins.org/"&gt;John Perkins&lt;/a&gt;' "&lt;a href="http://books.google.co.nz/books?id=nJFFrLX-924C&amp;amp;printsec=frontcover&amp;amp;dq=inauthor:John+inauthor:Perkins"&gt;Confessions of an Economic Hitman&lt;/a&gt;" yesterday. I was pessimistic at best that there were sufficient feelings of fellowship in the world, and this confirms and compounds my worries.&lt;/p&gt;&lt;p&gt;I think I will read the Dalai Lama's "&lt;a href="http://www.amazon.com/Ethics-New-Millennium-Dalai-Lama/dp/1573220256"&gt;Ethics for the New Millennium&lt;/a&gt;", mentioned in Bill Joy's article. Maybe that will cheer me up. In the mean time, maybe I'll read &lt;a href="http://www.dalailamafoundation.org/dlf/en/documents/enm-study-guide-2007-09-07.pdf"&gt;the study guide&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In the mean time, the sun shone today and the grass is green and it is quiet and peaceful here were I am. There is much to be happy about.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-6935942758641744450?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/6935942758641744450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=6935942758641744450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6935942758641744450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6935942758641744450'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/05/connections.html' title='Connections'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-1706466494426290239</id><published>2009-05-11T14:56:00.000-07:00</published><updated>2009-05-11T15:05:19.387-07:00</updated><title type='text'>Can't locate package XXX for @XXX::ISA</title><content type='html'>&lt;p&gt;You may see this error and think that package XXX can't be found in @INC and then be stumped when you find that module XXX.pm is in @INC.&lt;/p&gt;&lt;p&gt;The problem here is that "Can't locate package XXX" is not refering to the module XXX.pm and is not indicating that this module can't be found. It is referring to the package XXX and it is indicating that the stash of the package XXX isn't defined. This usually results from the module that defines the package not having been loaded (by use, require or do).&lt;/p&gt;&lt;p&gt;While there is often a one-to-one correspondence between them, packages and modules are not the same thing. A module is a file containing Perl code. A package is a namespace with its own stash containing the names in the namespace. &lt;/p&gt;&lt;p&gt;When @ISA is being processed, each package in the @ISA list must already be loaded (by use or require or do or whatever). If the stash for the package namespace isn't defined, then this error is produced.&lt;/p&gt;&lt;p&gt;The solution is to load the module that provides the package before including the package in @INC.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-1706466494426290239?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/1706466494426290239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=1706466494426290239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/1706466494426290239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/1706466494426290239'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/05/cant-locate-package-xxx-for-xxxisa.html' title='Can&apos;t locate package XXX for @XXX::ISA'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-162794185478103231</id><published>2009-05-11T14:28:00.000-07:00</published><updated>2009-05-11T14:45:24.956-07:00</updated><title type='text'>Testing with Module::Build</title><content type='html'>&lt;p&gt;&lt;a href="http://search.cpan.org/search?query=Module%3A%3ABuild&amp;amp;mode=all"&gt;Module::Build&lt;/a&gt; is a system for building, testing, and installing Perl modules.&lt;/p&gt;&lt;p&gt;Much of what you need to know is documented in the POD of Module::Build. In particular see the entry for the test function.&lt;/p&gt;&lt;p&gt;You may wonder how the as-yet-uninstalled module is tested when the test files do not explicity reference the build directories. This isn't covered in the POD.&lt;/p&gt;&lt;p&gt;Before running the tests, Module::Build prepends the blib/lib and blib/arch directories of the build directory to @INC. In this way, when modules are loaded the local copies are found and loaded rather than those already installed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-162794185478103231?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/162794185478103231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=162794185478103231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/162794185478103231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/162794185478103231'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/05/testing-with-modulebuild.html' title='Testing with Module::Build'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-2137221293219236955</id><published>2009-05-04T12:55:00.000-07:00</published><updated>2009-05-04T13:51:08.747-07:00</updated><title type='text'>A Few Thoughts on Copyright</title><content type='html'>&lt;p&gt;A friend sent me a link to a YouTube video that is a tutorial and advertisement for a website that provides "unlimited free games" for xbox 360. This was in the context of an ongoing discussion regarding copyright stimulated by recently enacted changes to the copyright act here in New Zealand. He sent the link with the comment that he understands why the industry wants new rules. He suggested I post my reply, so here it is...&lt;/p&gt;&lt;p&gt;&lt;span style="color:#333333;"&gt;It appears that the xbox360 site is copying games in breach of the copyright holders' copyrights. I understand why those copyright holders would want to enforce their copyrights but it is less clear whether any fundamental change in copyright law is necessary, appropriate or beneficial for society as a whole.&lt;br /&gt;&lt;br /&gt;The current law, as it is in most countries (164 signatories to the &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Berne_Convention_for_the_Protection_of_Literary_and_Artistic_Works"&gt;&lt;span style="color:#333333;"&gt;&lt;span&gt;&lt;span&gt;Berne conventio&lt;/span&gt;&lt;/span&gt;n&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#333333;"&gt; and others indirectly controlled via membership in the WTO) allows those copyright holders who's copyrights are being breached to prosecute the owners of the xbox360 site. No change in the law is required. All they have to do is prove the copyright violation in a court and sue for damages, including their legal costs.&lt;br /&gt;&lt;br /&gt;There is a potential problem that copyright holders might prove breach of copyright in court but then find that the guilty party does not have sufficient wealth to cover the legal costs of proving their guilt. This same potential exists in any other civil litigation. In general, it is easy for people to cause harm to others that would be monetized to values far exceeding their net worth. Consider, for example, all the people worth less than a few hundred million dollars and without third party liability insurance for a similar amount who continue to engage in activities  which create the risk of fires on a large scale (e.g. owning accommodations, driving to work, camping, etc.). There are many other risks that people take that might result in harm to others.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#333333;"&gt;If breach of copyright were deemed to be criminal activity, the copyright holder would be relieved of a large part of the cost of litigation, which would be shifted to the tax payer. This would greatly reduce the downside risk for the copyright holder. If this were done, it may be necessary to ensure public resources were not wasted on frivolous cases as there would be little to inhibit the copyright holder after the cost of litigation were removed. It would also be necessary to ensure reasonable protection of the accused from the harm of false or frivolous accusation.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#333333;"&gt;Some copyright holders are frustrated by the assumption inherent in the current law that people are innocent until proven guilty in a court of law. This requires them to prove who is violating copyright in order to obtain compensation for damages. Some would prefer to be able to obtain the compensation without the burden of proving who is guilty of breaching their copyright or even that their copyright has been breached. They might also appreciate the restoration of the Greek practice of &lt;a href="http://en.wikipedia.org/wiki/Slavery_in_ancient_Greece#A_specific_case:_debt_slavery"&gt;debt slavery&lt;/a&gt;, for dealing with those who are unable to promptly pay their presumed damages.&lt;br /&gt;&lt;br /&gt;There are two conflicting trends: one is progressively more legal rights being granted to corporate interests, seemingly on the premise that all corporate profit is inherently good for society, and the other is a growing number of people who are willing to disregard those legal rights. The widespread disregard for the legal rights of copyright holders (the evidence presented by some of the more vocal copyright holders suggests that in the case of copyright this disregard is extremely widespread - for example, to the extent that a universally applied tax and payment to the copyright holders has been proposed) combined with the ongoing trends in legislation makes one wonder if in fact we live in a democratic society. The answer may be that there is a growing discrepancy with individuals between their public personae (in which they support strong property rights) and their private personals (in which they disregard property rights). If this is the case, then this moral disintegration of individuals will lead to disintegration of society and widespread strife.&lt;br /&gt;&lt;br /&gt;There was a day when one held land at the pleasure of the king and only land holders had rights. Those days were only slightly removed from the days when those most effective in battle had rights at the expense of all others. We have come a long way, in many countries, to current society based largely in the rule of law applied, in principal at least, equally to all. There is a broad consensus with regard to physical property rights, gained through many centuries of experience with various laws.&lt;br /&gt;&lt;br /&gt;Modern technology combined with a very rapid pace of change has created a transient situation in which "intellectual property" can have a very high value. Under current regimes, all copyrights and all patents eventually expire, after which the affected information comes to the public domain. At the moment, an unusually high percentage of information relevant to modern life is recently obtained and subject to copyright or patent.&lt;br /&gt;&lt;br /&gt;At the same time, modern technology has reduced the barriers to replicating information to levels that are almost completely negligible. For example, the cost of replicating a movie is now less than the cost of the popcorn that one might eat while watching it.&lt;br /&gt;&lt;br /&gt;These conflicting trends have been identified for some time. One of the earliest and most profound expressions of the conflict that I know is that of Stewart Brand of the Whole Earth Catalog and other endeavors.&lt;br /&gt;&lt;br /&gt;This is layered on top of the more fundamental and persistent conflict between individual and common interests, well defined in Garrett Hardin's Tragedy of the Commons and elsewhere.&lt;br /&gt;&lt;br /&gt;There were many revolutions in the course of resolving land rights and other physical property rights to their current state and, I expect, there will be more in the course of resolving a reasonable state or management for intellectual "property" rights. These are not insignificant issues.&lt;br /&gt;&lt;br /&gt;My personal inclination is that neither the interests of society as a whole nor the interests of individuals on average are best served by granting long term monopolies on "intellectual property" as a default. Current timeframes for copyright were established at a time when little new arose in the span of 100 years. Patentable inventions are now arising so rapidly that the pace of change is disruptive to society and exceeds the capacity of many to cope. Further extension of monopolies seems to be of dubious benefit and may be harmful. &lt;br /&gt;&lt;br /&gt;To the extent that monopolies are granted and enforced for "intellectual property" (i.e. copyrights and patents) the holders of those rights should be subject to property tax on the value of those properties on the same basis that land owners are taxed on the value of the land they own. This would not resolve all the conflicts but it would redress some of them in a way that is easy to manage. One would, of course, always have the option of turning one's "intellectual property" over to the public domain, after which no further taxes would be due.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-2137221293219236955?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/2137221293219236955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=2137221293219236955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2137221293219236955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2137221293219236955'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/05/few-thoughts-on-copyright.html' title='A Few Thoughts on Copyright'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-5901538211237225907</id><published>2009-05-03T23:19:00.001-07:00</published><updated>2009-05-04T02:08:57.989-07:00</updated><title type='text'>Information Wants to be Free and Expensive</title><content type='html'>&lt;p&gt;Note: it seems that blogger.com or blogspot considers the following to be blog SPAM. My appologies if it offends anyone. I have requested a review and will remove the content and/or the blog, subject to the result of the review.&lt;/p&gt;&lt;p&gt;This isn't my idea. &lt;a href="http://www.rogerclarke.com/"&gt;Roger Clarke&lt;/a&gt; has provided a &lt;a href="http://www.rogerclarke.com/II/IWtbF.html"&gt;nice writeup&lt;/a&gt;. And while you are there, his page &lt;a href="http://www.rogerclarke.com/II/DarkAges.html"&gt;Freedom of Information? The Internet as Harbinger of the New Dark Ages&lt;/a&gt; is also worth a read. &lt;/p&gt;&lt;p&gt;There are many others. If you have a few spare minutes &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=%22information+wants+to+be+free%22&amp;amp;btnG=Google+Search&amp;amp;meta=&amp;amp;aq=f&amp;amp;oq="&gt;a quick search will yield much interesting reading&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-5901538211237225907?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/5901538211237225907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=5901538211237225907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5901538211237225907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5901538211237225907'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/05/information-wants-to-be-free-and.html' title='Information Wants to be Free and Expensive'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-4483950900862776058</id><published>2009-05-03T14:56:00.000-07:00</published><updated>2009-09-08T03:50:12.543-07:00</updated><title type='text'>Intellectual Property Tax</title><content type='html'>&lt;p&gt;Intellectual property should be taxed on the same basis as land and other real estate.&lt;/p&gt;&lt;p&gt;The legislation regulating intellectual property is changing. As well as increasing the scope of what is intellectual property and the time during which property rights are assigned to individuals, the rights themselves are being changed to make the property more rivalrous and excludable - to make intellectual property more like land and real estate.&lt;/p&gt;&lt;p&gt;In agrarian society, land is the essential asset of value. There are other assets of value, but ownership or at least the right to use land is essential to survival and the ability to produce wealth. Everything else is secondary.&lt;/p&gt;&lt;p&gt;In the modern "Information Age" the importance of information is recognized. It is not that information was not important in earlier ages, but the ability to gather, produce, manipulate, control and extract value from information is greater now than ever before.&lt;/p&gt;&lt;p&gt;The importance of intellectual property is increased both by the increasing ability to produce and use it  and by changes to legislation which increase the proprietary rights to intellectual property which are granted to the deemed owners of the property.&lt;/p&gt;&lt;p&gt;An increasing portion of society's wealth and resources is now invested in the creation, acquisition and control of information and intellectual property. While it was, historically, somewhat incidental to the key elements of the economy, wealth and power, it is increasingly central and essential to them. Information and intellectual property are becoming more important than land, real-estate and other physical property.&lt;/p&gt;The burden of government is distributed by the means of taxes and fees on income, consumption and properties. How this burden is distributed is rife with tension, conflict and contradiction. On the one hand, the burden is expected to be on those who benefit. On the other hand, the burden is expected to be on those able to bear it. While everyone might agree that the distribution should be fair, it is difficult to find two or more people who agree as what is fair or even what the basis of fair is.&lt;br /&gt;&lt;br /&gt;As well as distributing the burden of government, taxes and fees are also used to influence behavior. Relative decreases or increases of taxes and fees can encourage or discourage particular behaviors.&lt;br /&gt;&lt;br /&gt;Intellectual property should be taxed now as land and real estate have long been taxed, for the same reasons that land and real estate have been taxed. Just as land and real estate were the principle assets in agrarian society, intellectual property is the key asset in our modern information based society. Along with the privileges and benefits of owning these key assets come the responsibility of assuming a greater portion of the burden of government.&lt;br /&gt;&lt;br /&gt;Yet there is an important difference between intellectual property and real estate. Real estate cannot be reproduced and distributed like information can. Intellectual property is rivalrous and exclusive only because of regulations, not because of its essential nature. Thus while granting intellectual property rights increases the value to the property owner it significantly decreases the total value of that intellectual property to society as a whole by excluding many from benefiting from it. Compare this with the value of a field - it can be used to grow only one crop at a time and it cannot grow more or less depending on which farmer owns it.&lt;br /&gt;&lt;br /&gt;Given that the value of intellectual property can be maximized by allowing it to be reproduced and used freely, why are intellectual property right granted in the first place? A common argument for intellectual property rights is that they produce a market for intellectual property and this market provides incentive for the production of intellectual property and a means for allocating scarce resources to produce intellectual property and that these benefits outweigh the loss of utility of the intellectual property produced.&lt;br /&gt;&lt;br /&gt;But excessive prolongation of intellectual property rights does little or noting to increase incentive to produce intellectual property while it continues to decrease utility and utilization.&lt;br /&gt;&lt;br /&gt;Intellectual property tax can provide a reasonable disincentive to excessive prolongation of intellectual property rights that responds to market conditions. If the owners of intellectual property were required to pay property tax but could avoid the tax by turning the property over to the public domain, then there would be an incentive to put intellectual property into the public domain. The benefit is that information in the public domain can have higher utility and utilization that proprietary intellectual property.&lt;br /&gt;&lt;br /&gt;Intellectual property tax would also put an end to the copyright black hole, whereby many copyrighted works are no longer available because the copyright owner is unknown or unavailable to approve and be paid for the right to produce and sell copies of the work. If tax was due, the works could be seized and put into the public domain if the taxes are not paid.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-4483950900862776058?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/4483950900862776058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=4483950900862776058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4483950900862776058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/4483950900862776058'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/05/intellectual-property-tax.html' title='Intellectual Property Tax'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-8826602367002193701</id><published>2009-04-30T12:36:00.000-07:00</published><updated>2009-04-30T13:31:10.789-07:00</updated><title type='text'>What's wrong with HTML and CSS??</title><content type='html'>&lt;p&gt;W3C says:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Tables should not be used purely as a means to layout document content as this may present problems when rendering to non-visual media. Additionally, when used with graphics, these tables may force users to scroll horizontally to view a table designed on a system with a larger display. To minimize these problems, authors should use style sheets to control layout rather than tables.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;But style sheets are not capable of reasonable layout. Not only is the design of CSS layout overly complex and obtuse, but the specification is so poorly designed and written that no two browsers are consistent in their implementation of it - not even two subsequent versions from the same vendor!!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;What makes this even more bizzare is that before designing CSS there was a working model: HTML tables. It would have been easy, and sufficient for most purposes, to provide in CSS the layout capabilities already present in tables. This need not have precluded other layout options, but at least there would then have been one reasonably sane and reasonably well understood (i.e. amenable to consistent implementation) means of laying out pages with CSS.&lt;/p&gt;&lt;p&gt;As it is, I will continue using tables for the foreseeable future.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-8826602367002193701?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/8826602367002193701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=8826602367002193701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/8826602367002193701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/8826602367002193701'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/04/whats-wrong-with-html.html' title='What&apos;s wrong with HTML and CSS??'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-8197900228235314482</id><published>2009-04-29T16:45:00.000-07:00</published><updated>2009-04-29T21:06:38.598-07:00</updated><title type='text'>It's hard to be helpful</title><content type='html'>&lt;p&gt;It struck me again this morning how difficult it is to be helpful.&lt;/p&gt;&lt;p&gt;Comments and suggestions may be taken as criticism, particularly if they relate to someones core beliefs, values, passions or achievements. And criticism, perceived or actual, often elicits defensive reactions that inhibit further communication and learning.&lt;/p&gt;&lt;p&gt;As a result, it can be difficult to get someone to think about and understand a new or different idea and more so to get them to accept that it is valid or has merit.&lt;/p&gt;&lt;p&gt;I quite like the quote in &lt;a href="http://www.perlmonks.org/?node_id=65117"&gt;this post&lt;/a&gt;. on &lt;a href="http://www.perlmonks.org/?"&gt;PerlMonks&lt;/a&gt;. If I understand correctly, this is a quote from &lt;a href="http://en.wikipedia.org/wiki/Hagakure"&gt;Tagakure&lt;/a&gt;. I will have to read this to see if it is the true source and if it is generally of the same quality as the quoted passage.&lt;/p&gt;&lt;p&gt;There are recent translations of Tagakure available from Amazon and elsewhere. There is also &lt;a href="http://exhibita.com/Misc/hagakure/"&gt;this version&lt;/a&gt;, which purports to be a copy in the public domain. I Don't see it on Guttenburg or Internet Archive, which makes me wonder if it is actually in the public domain. The Wikipedia article also has a link to an on-line copy, though I don't see any statement about copyright there.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-8197900228235314482?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/8197900228235314482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=8197900228235314482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/8197900228235314482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/8197900228235314482'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/04/its-hard-to-be-helpful.html' title='It&apos;s hard to be helpful'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-6051139096969576574</id><published>2009-04-22T14:16:00.000-07:00</published><updated>2009-04-22T16:31:35.966-07:00</updated><title type='text'>Perl Objects</title><content type='html'>&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;a href="http://perldoc.perl.org/perlobj.html"&gt;Perl Objects&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;What is an object in Perl?&lt;/p&gt;&lt;p&gt;An object is a &lt;a href="http://perldoc.perl.org/perlref.html"&gt;reference&lt;/a&gt; to an item (anything that can be referenced by a reference) that has been blessed. &lt;/p&gt;&lt;p&gt;An object is created by first creating a reference and then using the &lt;a href="http://perldoc.perl.org/functions/bless.html"&gt;bless&lt;/a&gt; function to bless the referenced item with a package name.&lt;/p&gt;&lt;p&gt;For example:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;$reference = {};  # here a reference to a hash but it could be to anything&lt;/p&gt;&lt;p&gt;bless $reference, "Some::Package::name";&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The bless function requires a reference as an argument but it modifies the referenced item rather than the reference itself. It sets a flag in the referenced item that indicates that the item is an object and it records the package name as an attribute of the item. With this done, any reference to the item can be used with the &lt;a href="http://perldoc.perl.org/perlop.html#The-Arrow-Operator"&gt;arrow operator&lt;/a&gt; (a.k.a. dereference operator) for method invocation.&lt;/p&gt;&lt;p&gt;It is the facility of method invocation that makes objects different from other variables. &lt;/p&gt;&lt;p&gt;Method invocation is a means of calling a subroutine. It differs from regular subroutine invocation in two respects: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;the package name with which the referenced item was blessed is passed as the first argument to the subroutine, followed by any explicit arguments; and&lt;/li&gt;&lt;li&gt;a runtime lookup of the method name is performed to determine the subroutine to be called.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For example:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;$ref-&gt;method($arg1, $arg2);&lt;/p&gt;&lt;p&gt;$ref-&gt;Package::method($arg1,$arg2);&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The method name may be unqualified or qualified with a package name. If it is unqualified, lookup of the subroutine begins in the package with which the referenced item was blessed. If the method name is fully qualified, lookup begins in the specified package, regardless of the package with which the referenced item was blessed.&lt;/p&gt;&lt;p&gt;If the package has a subroutine with the same name as the method name then this subroutine is called.&lt;/p&gt;&lt;p&gt;If the package does not have a subroutine with the same name as the method name then lookup is repeated in each package in the list (@ISA, 'UNIVERSAL'). The @ISA array is a package global and 'UNIVERSAL' is a package that is part of the Perl core distribution which defines several basic methods. As each package may have its own @ISA array, a depth first search of these arrays is performed.&lt;/p&gt;&lt;p&gt;If no matching subroutine is found after this search then the search is repeated but searching for AUTOLOAD rather than the named method and if an AUTOLOAD subroutine is found then it is invoked for the method.&lt;/p&gt;&lt;p&gt;These mechanisms are simple, but the ramifications and possibilities are not.&lt;/p&gt;&lt;p&gt;Because methods are resolved to subroutines at runtime (a.k.a. dynamically), interesting things can be done. Sometimes these are interesting in the sense of wonderful, amazing, powerful and good, but sometimes they are interesting in the sense of the curse: may you live in interesting times. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-6051139096969576574?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/6051139096969576574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=6051139096969576574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6051139096969576574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6051139096969576574'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/04/perl-objects.html' title='Perl Objects'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-6475183695510465511</id><published>2009-04-15T18:47:00.000-07:00</published><updated>2009-04-15T18:49:10.297-07:00</updated><title type='text'>perl system on windows</title><content type='html'>&lt;p&gt;On Windows systems, if the first argument to "system" is a number or integer and not a string it is taken to be the mode of the spawn call that creates the process to run the command which, in this case, is specified by the second argument to system. Allowed values are P_WAIT or P_NOWAIT as defined in process.h.  These are usually 0 (synchronous execution - calling process waits until the spawned process terminates) and 1 (asynchronous execution - calling process continues to execute concurrently with the spawned process) respectively. Other values are not supported by perl and will result in system returning an error (-1) without running the command.  The default is synchronous execution (P_WAIT).&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-6475183695510465511?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/6475183695510465511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=6475183695510465511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6475183695510465511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6475183695510465511'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/04/perl-system-on-windows.html' title='perl system on windows'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-6562192091381293347</id><published>2009-02-27T16:51:00.000-08:00</published><updated>2009-02-27T17:05:15.178-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Devel::Peek</title><content type='html'>&lt;p&gt;Consider:&lt;/p&gt;&lt;p&gt;$ perl -MDevel::Peek -e 'my $x; Dump($x);'&lt;br /&gt;SV = NULL(0x0) at 0x9c90cdc&lt;br /&gt;  REFCNT = 1&lt;br /&gt;  FLAGS = (PADBUSY,PADMY)&lt;br /&gt;$ perl -MDevel::Peek -e 'my $x = 10; Dump($x);'&lt;br /&gt;SV = IV(0x8a5a9b0) at 0x8a3ecdc&lt;br /&gt;  REFCNT = 1&lt;br /&gt;  FLAGS = (PADBUSY,PADMY,IOK,pIOK)&lt;br /&gt;  IV = 10&lt;br /&gt;[ian@alula ~]$ perl -MDevel::Peek -e 'my $x = 10; Dump(\$x);'&lt;br /&gt;SV = RV(0x809d158) at 0x8074c28&lt;br /&gt;  REFCNT = 1&lt;br /&gt;  FLAGS = (TEMP,ROK)&lt;br /&gt;  RV = 0x8074cdc&lt;br /&gt;  SV = IV(0x80909b0) at 0x8074cdc&lt;br /&gt;    REFCNT = 2&lt;br /&gt;    FLAGS = (PADBUSY,PADMY,IOK,pIOK)&lt;br /&gt;    IV = 10&lt;br /&gt;&lt;br /&gt;What are all the addresses?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;perldoc Devel::Peek doesn't say.&lt;/p&gt;&lt;p&gt;Every value has data stored in a structure 'struct sv'. Dump reports the address where this structure is located in memory as "at 0xXXXXXXXX". For example, in&lt;/p&gt;&lt;p&gt;SV = IV(0x8a5a9b0) at 0x8a3ecdc&lt;/p&gt;&lt;p&gt;The 'struct sv' for this SV is located at 0x8a3ecdc.&lt;/p&gt;&lt;p&gt;Most values (all but NULL values) also have data stored in a second, type specific structure. The 'struct sv' includes a pointer to this secondary structure. Dump reports the address where this secondary structure is located in memory in parentheses after the type of the value. For example, in&lt;/p&gt;&lt;p&gt;SV = IV(0x8a5a9b0) at 0x8a3ecdc&lt;/p&gt;&lt;p&gt;The type of the value is IV (which determines the type of the secondary structure) and the secondary structure is located at 0x8a5a9b0.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-6562192091381293347?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/6562192091381293347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=6562192091381293347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6562192091381293347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/6562192091381293347'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2009/02/develpeek.html' title='Devel::Peek'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-5939610746624806434</id><published>2008-12-23T15:08:00.000-08:00</published><updated>2009-02-01T15:57:39.821-08:00</updated><title type='text'>TWiki TinyMCE and Opera</title><content type='html'>Today I installed TWiki 4.2.4, which includes TinyMCE editor.&lt;br /&gt;But in Opera 9.61 I only get the traditional editor - no TinyMCE in sight.&lt;br /&gt;Tried accessing from Firefox and it worked fine.&lt;br /&gt;&lt;br /&gt;So, I downloaded TinyMCE from http://tinymce.moxiecode.com/index.php, put it on my internal website and ran the examples from Opera - no problems - TinyMCE works fine in Opera.&lt;br /&gt;&lt;br /&gt;Looked at the source code for the edit pages in Opera and Firefox and the TinyMCE content is only there in Firefox. TWiki must be deciding I can't run TinyMCE for some reason and providing different content to Opera than it provides to Firefox.&lt;br /&gt;&lt;br /&gt;It turns out that in January 2008, Opera was added to a short list of browsers that are not compatible with the TinyCME plugin of TWiki.See http://develop.twiki.org/~twiki4/cgi-bin/view/Bugs/Item5116 for details. It seems TinyMCE in Opera corrupts data.&lt;br /&gt;&lt;br /&gt;The TWiki TinyMCEPlugin is using version 2.1.2, but the current release is 3.2.1.1. This may have something to do with the problems with Opera. There are indications on the TinyMCEPlugin development page that upgrading is not trivial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-5939610746624806434?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/5939610746624806434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=5939610746624806434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5939610746624806434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/5939610746624806434'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2008/12/twiki-tinymce-and-opera.html' title='TWiki TinyMCE and Opera'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-7521432746686015315</id><published>2007-07-02T11:44:00.000-07:00</published><updated>2007-07-02T12:12:07.079-07:00</updated><title type='text'>Apache 2.2 / mod_auth_kerb on FC6</title><content type='html'>&lt;span style="font-family:Times New Roman;"&gt;There is a bug in krb5-libs-1.5-21.1.i386.rpm, the latest available for FC6 from &lt;a href="http://download.fedora.redhat.com/pub/fedora/linux/core/updates/6/i386/"&gt;http://download.fedora.redhat.com/pub/fedora/linux/core/updates/6/i386/&lt;/a&gt;, which affects mod_auth_kerb.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;The bug manifests in the error log as:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;/span&gt;&lt;br /&gt;[Sun Jul 01 06:37:54 2007] [error] [client 1.2.3.4] gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information (Cannot allocate memory)&lt;br /&gt;&lt;br /&gt;MIT has already fixed the bug (about the same time krb5-libs-1.5-21.1.i386.rpm was released), but I don't see a more recent rpm available for FC6.&lt;br /&gt;&lt;br /&gt;The bug is in lib/gssapi/krb5/indicate_mechs.c. The if() has the condition negated, which is wrong. The function should be as follows:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;OM_uint32&lt;br /&gt;krb5_gss_indicate_mechs(minor_status, mech_set)&lt;br /&gt;     OM_uint32 *minor_status;&lt;br /&gt;     gss_OID_set *mech_set;&lt;br /&gt;{&lt;br /&gt;   *minor_status = 0;&lt;br /&gt;&lt;br /&gt;   if (gssint_copy_oid_set(minor_status, gss_mech_set_krb5_both, mech_set)) {&lt;br /&gt;         *mech_set     = GSS_C_NO_OID_SET;&lt;br /&gt;         *minor_status = ENOMEM;&lt;br /&gt;         return(GSS_S_FAILURE);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return(GSS_S_COMPLETE);&lt;br /&gt;}&lt;br /&gt;"./gssapi/krb5/indicate_mechs.c" line 44 of 44 --100%-- col 1&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;More here&lt;br /&gt;I fixed it by installing the source RPM krb5-1.5-21.1.src.rpm, editing indicate_mechs.c, rebuilding the RPMs and installing them.&lt;br /&gt;&lt;br /&gt;For those no more familiar with doing such things than I was, the following suggestions may help:&lt;br /&gt;&lt;br /&gt;rpm -i krb5-1.5-21.1.src.rpm&lt;br /&gt;cd /usr/src/redhat/SPECS&lt;br /&gt;rpmbuild -bb krb5.spec&lt;br /&gt;Check and confirm that the RPMS were built successfully&lt;br /&gt;cd /usr/src/redhat/BUILD/krb5-1.5/src/lib/gssapi/krb5&lt;br /&gt;vi indicate_mechs.c&lt;br /&gt;Change the if() to read as above (i.e. remove the '!')&lt;br /&gt;cd /usr/src/redhat/SPECS&lt;br /&gt;rpmbuild -bc --short-circuit krb5.spec&lt;br /&gt;cd /usr/src/redhat/RPMS&lt;br /&gt;rpm -U --force krb5*&lt;br /&gt;&lt;br /&gt;It would be better to make a patch and change the version number of the RPM, but I don't know enough to do that.&lt;br /&gt;&lt;br /&gt;After this change, mod_auth_kerb worked fine!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-7521432746686015315?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/7521432746686015315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=7521432746686015315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7521432746686015315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/7521432746686015315'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2007/07/apache-22-modauthkerb-on-fc6.html' title='Apache 2.2 / mod_auth_kerb on FC6'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1689887569269461760.post-2169086773589115451</id><published>2007-05-22T11:19:00.000-07:00</published><updated>2007-05-22T11:28:13.444-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Greetings'/><title type='text'>First Post</title><content type='html'>Welcome to my new blog.&lt;br /&gt;Probably not very interesting, except maybe for friends and family.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1689887569269461760-2169086773589115451?l=iansworld-nz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iansworld-nz.blogspot.com/feeds/2169086773589115451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1689887569269461760&amp;postID=2169086773589115451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2169086773589115451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1689887569269461760/posts/default/2169086773589115451'/><link rel='alternate' type='text/html' href='http://iansworld-nz.blogspot.com/2007/05/first-post.html' title='First Post'/><author><name>Ian</name><uri>http://www.blogger.com/profile/11071498130330741906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
