tgreer 189 Made Her Cry Team Colleague

$email

$email.val()

tgreer 189 Made Her Cry Team Colleague

Google cannot respect privacy. Their entire business model is based upon copying, indexing, monetizing, and re-serving copyrighted content: websites, books, etc.If they start respecting privacy, they risk pulling the thread that unravels the sweater.

Google must continue to completely ignore user privacy, treat all data that is "collectible" by any technological means as "public", and so long as we, the public, continue to view the results as useful, they are justified.

If we truly don't like this, we'll stop using Google. Until that happens, no law or bad publicity or legislation will make a bit of difference.

We endorse Google's policies each time we use their products.

tgreer 189 Made Her Cry Team Colleague

Research the System.Drawing namespace.

tgreer 189 Made Her Cry Team Colleague

Set the encoding to something that includes your characters:

Console.OutputEncoding = Encoding.UTF8

Sorry, the console is only 8-bit, so UTF16 not an option.

Then use a font which encodes and contains the characters. Change the properties of the cmd.exe to use Consolas font, for example.

tgreer 189 Made Her Cry Team Colleague

It sounds to me like you would need to create the MS-WORD document in code, stream it out to a temporary location determined by your application, then open it.

The Web abounds with examples of creating Office Documents in .NET.

tgreer 189 Made Her Cry Team Colleague

Dan,

Can you define the word "interoperating" in this context? Do you mean, "interpreting"? SHA-1 is a one-way hashing algorithm. You can't convert it back to its "original" string.

tgreer 189 Made Her Cry Team Colleague

I fixed this... problem was using the public properties in the Constructor instead of the private fields.

tgreer 189 Made Her Cry Team Colleague

I have a C# Class Library which I want to use as a COM object in VBScript. I'm using Visual Studio C# 2010 Express.

Here's the class code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace PB_GUID
{
    class PB_GUID_Encode
    {
        private Guid _myGuid;
        private string _myHexGuid;
        private string _myBase64Guid;
      
        public Guid MyGuid
        {
            get { return _myGuid; }
            set { _myGuid = value; }
        }

        public string MyHexGuid
        {
            get { return _myHexGuid; }
            set { _myHexGuid = value; }
        }

        public string MyBase64Guid
        {
            get { return _myBase64Guid; }
            set { _myBase64Guid = value; }
        }

        // Constructor
        public PB_GUID_Encode()
        {
            MyGuid = Guid.NewGuid();

            // HEX
            StringBuilder sb = new StringBuilder();
            foreach (byte b in MyGuid.ToByteArray())
            {
                sb.Append(String.Format("{0:X2}", b));
            }
            MyHexGuid = sb.ToString();

            // Base64
            MyBase64Guid = Convert.ToBase64String(MyGuid.ToByteArray());
        }
    }
}

When I build the Solution, I get the warning that the dll "does not contain any types that can be registered for COM Interop."

The Project is signed with a strong name, is set to "Make assembly COM-Visible", and I have "Register for COM interop" checked.

What more must I do to compile this as a COM object?

tgreer 189 Made Her Cry Team Colleague

Both are subsets of, or, are derived from, SGML.

HTML is an SGML used for web page design, help files, and HTA applications.

XML is a more generalized mark-up language typically used for system or application configuration files or data migration projects.

XHTML is a version of HTML that strictly adheres to XML rules.

tgreer 189 Made Her Cry Team Colleague

You can override a style declaration with an inline style (that's the "Cascading" part of Cascading Style Sheets).

tgreer 189 Made Her Cry Team Colleague

Research use of the "attribute" directive to build your node. However, in XML these constructs are equivalent:

<note></note>

means the same thing as:

<note />

so, there is NO NEED to alter your XSLT. Contrary to your question, you do NOT "have to create" self-closing tags.

tgreer 189 Made Her Cry Team Colleague

In the Event Viewer it's possible to assign a task to a particular event. It's also possible to Connect to another computer to view its Event Log(s).

Is it possible to create a task on my computer when an event occurs on a remote computer?

In my particular situation both PCs are running Windows 7 Enterprise.

tgreer 189 Made Her Cry Team Colleague

No... what I was suggesting is to create a stored procedure which will select the records you want, then update those records. If you do a web search for "stored procedure select update" you'll find several discussions and examples.

tgreer 189 Made Her Cry Team Colleague

Again, do this work at the database level. Don't have a select query followed by an update query, but rather construct a stored procedure that does what you need.

tgreer 189 Made Her Cry Team Colleague

Define "returns results that it hasn't seen before". Surely you don't want to try to store the results of every query, per session, and do a comparison in real time. You want to do this work at the database level. You should add a timestamp field or some other field to use as a flag and build the proper SELECT query to return the results you want.

tgreer 189 Made Her Cry Team Colleague

The XMLHTTP object is the core of AJAX functionality. It's essentially a way to call a web page roundtrip from within code. Depending on your browser, the exact syntax to call the XMLHTTP object differs. It might be as simple as:

new XMLHttpRequest

Or you might need to use an ActiveX object:

new ActiveXObject("Microsoft.XMLHTTP")

What's common in script is to declare a function that has try/catch blocks for the various ways of instantiating the XMLHTTP object, and most sample code out there defines that function as getXMLHTTP().

So in your code snippet, we see a function named getXMLHTTP() called, but we don't see that function actually defined.

tgreer 189 Made Her Cry Team Colleague

Perhaps it's just the way I work. I tend to need to solve very specific problems, and how they fit into a larger context is a separate, or "meta" issue. Figuring out an XSLT Transform, or even just part of it, is a singular task, and if other programmers on the project use it in a C# class, or within a Document Management System, or as part of a PHP program, isn't necessarily relevant to me. Projects in my environment usually have an "Ask Tom" component and success is measured by how often I hear "that worked!".

I digress. My point is that, if the current site organization works for most Daniweb users, then it works. If others shared a similar frustration and wanted language-specific forums, they would have chimed in... and they didn't. So, thread solved.

Drop me a line, love to catch up with you.

tgreer 189 Made Her Cry Team Colleague

I think I've posted on this before, but I find the overall site categorization non-intuitive. "Software Development" vs. "Web Development" doesn't make sense to me. Web development IS software development. I propose the site be organized by software development languages and platforms.

DHTML/AJAX includes working with XML/XSLT, so where do I post? I do my ASP.NET development in C#, so again, where do I post? Where do I post if I have a question about Regular Expressions? Those posts are scattered across the forum.

If I'm working out a Regular Expression, I should be able to post specifically in a RegEx forum, instead of trying to figure out whether to post in PHP, ASP.NET, Java, C#, Legacy and Other Languages, etc.

Likewise, where do VBScript or VBA questions belong? VBScript can be used for Windows Shell Scripting, or for ASP development. And so on...

tgreer 189 Made Her Cry Team Colleague

Since it's been about three years since I had to write any XSLT, I'd like some assistance with the code below.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="2.0">
<xsl:output method="text"/>
<xsl:template match="/">

<xsl:for-each select="/WatchConfig/ProcessList/Process/Node">
<xsl:if test="Plugin = 'PWScript'">
<xsl:text>
</xsl:text>
<xsl:value-of select="Config" disable-output-escaping="yes" />
<xsl:text>
************************************************************************
</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

The code above works fine. It outputs the value of the Config element, a child of /WatchConfig/ProcessList/Process/Node, when the "Plugin" sibling value equals "PWScript". In other words, Node contains Config and Plugin, and when Plugin = PWScript, output the value of Config. So far so good.

However, sometimes the Node element contains another Node Element, and I want to perform the same operation on that Node. And so on, deeper and deeper:

/WatchConfig/ProcessList/Process/Node
/WatchConfig/ProcessList/Process/Node/Node
/WatchConfig/ProcessList/Process/Node/Node/Node

I suspect I need to have an IF for "Node" and then call a function recursively.

I've forgotten how. :)

Thanks

tgreer 189 Made Her Cry Team Colleague

Excel isn't XML.

tgreer 189 Made Her Cry Team Colleague

XSLT processors see whitepsace within the stylesheet as literal text and outputs it as such.

To have better control, use the TEXT element.

<text>    My Text   </text>

The only whitespace preserved is the whitespace within the element.

If you use text elements, the parser views any other whitespace as insignificant and discards it.

tgreer 189 Made Her Cry Team Colleague

The answer is "no". The entire purpose of XSLT is to transform a SPECIFIC XML format to a SPECIFIC output. There is no magic code to transform any XML to pretty HTML. Sorry. You have to match templates. Think about what that implies: to do a "match", you have to specify what it is you are matching.

That said, the generic node common to all XML is the root node, and XSLT has built-in templates. Do a web search for "XSLT Identity" and you'll see generic ways to output XML to XML, but as soon as you want to do something specific (turn THIS XML node into THAT HTML tag) then you must (by definition) be specific.

tgreer 189 Made Her Cry Team Colleague

The answer is "no". The entire purpose of XSLT is to transform a SPECIFIC XML format to a SPECIFIC output. There is no magic code to transform any XML to pretty HTML. Sorry. You have to match templates. Think about what that implies: to do a "match", you have to specify what it is you are matching.

That said, the generic node common to all XML is the root node, and XSLT has built-in templates. Do a web search for "XSLT Identity" and you'll see generic ways to output XML to XML, but as soon as you want to do something specific (turn THIS XML node into THAT HTML tag) then you must (by definition) be specific.

tgreer 189 Made Her Cry Team Colleague

All drivers are OK, no errors reported. This is a MS keyboard/mouse combo as mentioned in the first post, so no compatibility issues. IntelliMouse drivers/control software installed, uninstalled, no difference. I think this is a case of the OS trying to be entirely too cute with the mouse, giving extra features that just get in the way. I installed (again) the latest IntelliMouse software from MS and methodically disabled every button and feature I could and it seems to be behaving a lot better.

Thanks.

tgreer 189 Made Her Cry Team Colleague

For example, when I open the Device Manager, and click the down vertical scroll bar to scroll down to the list of USB devices to see if there's a problem, then let go of the mouse button, the list will scroll back up to the top "by itself". This doesn't happen in everything, for example, scrolling down Daniweb in Firefox has no issues. It seems to be OS dialog boxes, not program dialog boxes... but that isn't accurate either. HTML dropdowns are inoperable. I can click, they flash open, then immediately close. Only keyboard navigation works there.

This is driving me crazy!

tgreer 189 Made Her Cry Team Colleague

The "sticky keys" solution didn't work. Dropdowns, scrollbars, even the "pointer speed" setting in the mouse control panel, all behave as if the mouse button is being held down. It certainly appears as if some hover/assistive technology setting is at work, but I can't find it.

tgreer 189 Made Her Cry Team Colleague

Thanks for the reply! I will give this a try this evening and post the results back to the thread.

tgreer 189 Made Her Cry Team Colleague

I'm having the same problem described in this, unresolved, thread on MS ANSWERS:

http://answers.microsoft.com/en-us/windows/forum/windows_7-hardware/mouse-scrolling-stuck-with-wireless-mouse-windows/ad41e351-d5f3-4a31-98f3-018e81dd3e9e

I have a MS Wireless Laser Mouse 6000 v2.0. Windows 7 Professional 64-bit.

Most dropdown controls and scrollbars will behave as if the mouse button is being held down.

I should note the keyboard will often act as if the arrow keys are being pressed, as well.

This is only on Windows 7. I use the same mouse on a laptop running XP, with no issues. I've tried another mouse, it behaves the same. So I suspect it isn't a hardware issue.

I've installed and uninstalled the mouse/keyboard software from MS, makes no difference.

Interestingly, when I remote to the system from an XP box using the same mouse/keyboard, the problem doesn't appear.

So I think I've thoroughly narrowed this down to the Windows 7 OS itself not working well with this, or any, mouse, on my system.

Any clues?

tgreer 189 Made Her Cry Team Colleague

Not so. I'm not being clear, I guess. I have two external applications which use this database. SQL Server Management Studio is one of them. I have a document processing workflow tool called PlanetPress which can attach to a DSN as a DataSource. I can run either of these, or even both at the same time, with no issues. As a further test, I just created an MS-WORD Merge that uses this DB as a data source. No issues.

But after running any of these applications, the C# app fails on the .Fill() method with the error in my original post. If I restart SQL Server, it will run, but only as long as nothing else accesses the DB.

So, I'm thinking it is something about VS2010 Express and how it attaches data sources. I ran the Data Source Wizard, and the only choice for SQL was "Microsoft SQL Server Database File". Does that fact that VS2010 Express has no option for SQL Server per se, but only a "Database File" mean that it requires EXCLUSIVE access to the database?

tgreer 189 Made Her Cry Team Colleague

To reiterate, Sql Server Management Studio has no problems connecting to the database after the C# app runs, nor does any app which uses the DSN... but if run my app, then run SSMS, then run the app again, I get the error.

tgreer 189 Made Her Cry Team Colleague

Interesting. All of the data-related objects are auto-generated, I would hope that VS2010 would properly dispose objects it creates!

The error occurs at Form Load with this code:

private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'timeTrackDataSet.project' table. You can move, or remove it, as needed.
            this.projectTableAdapter.Fill(this.timeTrackDataSet.project);
        }

Which objects would I close/dispose, and at what event?

tgreer 189 Made Her Cry Team Colleague

I'm coding a project in C#, VS2010, using SQL Express 2008 as the data source. Whenever any other application connects to the database (such as Management Studio), the next time my C# application runs, it cannot access the database.

The error is "Operating system error 32".

Unable to open the physical file "... .mdf".

The process cannot access the file because it is being used by another process.

Cannot open user default database. Login failed.

It doesn't matter what other application touches the database, my app will fail unless and until I restart the SQL Server service.

I use SSMS, and I also have created a DSN to the database for a third party application to query and update. When either of these run (and they do, with no errors), then I have to restart the SQL Server service before I run my C# app.

I'd obviously like to understand why this is so and fix it!

tgreer 189 Made Her Cry Team Colleague

Here's my code for the combobox event. The idea is that when the user changes the ComboBox to a new value, insert a new record into the database with the Identify field ("id") of the same record that the ComboBox uses for it's value, and to grab the id field of the record the ComboBox changed to.

As I mentioned, this does work except when the program is closed, in which case line 11 throws an error. My guess is because during shutdown the data objects go away. What I don't understand is why this event code fires when the program closes.

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            timer1.Stop();
            StartStopTimes.StopTime = DateTime.Now;
            timesTableAdapter.Insert(StartStopTimes.ProjectID, StartStopTimes.StartTime, DateTime.Now);

            timer1.Start();
            StartStopTimes.StartTime = DateTime.Now;
            labStart.Text = StartStopTimes.StartTime.ToLongTimeString();

            Int32 myID = Convert.ToInt32(((DataRowView)projectBindingSource.Current).Row.ItemArray[0]);
            StartStopTimes.ProjectID = myID;
                         
        }
tgreer 189 Made Her Cry Team Colleague

I cannot get that block of code to work... but I suspect that with a databound Combobox, the SelectIndexChanged event fires what the data is bound and when it is un-bound, which would happen during form load, and unload. So I should wrap my code in an if block so it doesn't try to execute when the form is closing.

That's my theory.

tgreer 189 Made Her Cry Team Colleague

Those events are not wired, no. I'm not at the machine with the code, but will post more when I can. Thanks for the reply.

tgreer 189 Made Her Cry Team Colleague

Windows Form Application, C#, in VS2010 Express.

I get the "Object reference not set to an instance of an object." error with the line of code below, when I attempt to close the Form.

Int32 myID = Convert.ToInt32(((DataRowView)projectBindingSource.Current).Row.ItemArray[0]);

This is a simple form with two data-bound controls. The record has three fields, and I'm attempting to grab the non-bound field. The code runs fine, except for the error when I close the form.

That line of code is in a comboBox1_SelectedIndexChanged event handler, so not sure why the error fires on form close. Any suggestions?

tgreer 189 Made Her Cry Team Colleague

No. Try writing a reply without being logged in. When you click the "Post Reply to this Thread" button, you are redirected to a Registration Page. That page does not have a section for current members to log in. Click the "Member Login" button instead, and you are Thanked, and redirected to a totally white page. Your post is "lost", unless you had the foresight to copy it from the right side of the registration page to your clipboard.

tgreer 189 Made Her Cry Team Colleague

I agree. I did find that the post was displayed on the right side and could be copied to the clipboard, so that it wasn't exactly "lost". However, when prompted to log in after making a reply, the site returns a "dead end"... you aren't back in the thread, but are on a white/empty page.

tgreer 189 Made Her Cry Team Colleague

Nick - yes it's really me. VBscript isn't "Legacy", however. This most properly belongs in the Shell Scripting forum, as I'm working within an encapsulation of the Windows Script Host, but that forum seems dedicated to Unix.

Andre - I'd seen that page in your link in my searches on the topic, and it illustrates a lot of concepts except the one I need. It shows turning strings into bytes and into 205s, but not the reverse!

tgreer 189 Made Her Cry Team Colleague

Update: apparently in my first code snippet, objXMLHTTP.ResponseBody is a byte array, which is what the ADODB.Stream Write() method expects, so it runs.

However, the OLEobject field contains a value of datatype "205", which must be converted into a byte array. Since VBscript doesn't have a byte() data type, I must

1. Convert the 205 value to an array of variants()
2. Cast the variant() to byte()

I know how to do the second task, using (ironically) ADODB.Stream! But how does one accomplish the first task?

Given an ADODB.RecordSet Field that contains an OLEobject, datatype 205, how does one covert this to an array of Variants? Thanks.

tgreer 189 Made Her Cry Team Colleague

Thanks for the reply.

I'm sorry, but this isn't a Web Development task at all, so I thought of the choices I had, "Software Development" in the VB family forum made the most sense.

As a scripting task, this will have no user interface, so VB6 form code isn't precisely relevant. Also, the core issue is that VBScript doesn't have a Byte() data type, which is why one must resort to AD0.

So to rephrase my question in the context of your post, how does one use the ADODB library, in VBScript, to store the contents of a binary file to disk?

Actually, I can do that, as shown in my first code snippet. So I have to revert to my original question, which is, to paraphrase, why doesn't the ADO Write() method work with the contents of an OLEobject Field? Or, more generally, "Yo... what am I doing wrong?"

tgreer 189 Made Her Cry Team Colleague

First, sorry for posting this here, but I couldn't find a VBScript forum on Daniweb (which I find surprising).

I'm working with binary data in several different projects. Below is an example of code that works to retrieve a static map image (PNG) from Google:

strFileURL = "http://maps.google.com/maps/api/staticmap?markers=2200+S+Western+Ave+Lisle+IL&zoom=14&size=400x400&sensor=false"

Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
Set objFSO = Createobject("Scripting.FileSystemObject")

objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
  Set objADOStream = CreateObject("ADODB.Stream")
  objADOStream.Type = 1 'adTypeBinary
  objADOStream.Open

  objADOStream.Write objXMLHTTP.ResponseBody
  objADOStream.Position = 0

  Set tempfolder = objFSO.GetSpecialFolder(2)
  tempname = tempfolder & "\" & objFSO.GetTempName

  If objFSO.Fileexists(tempname) Then objFSO.DeleteFile tempname
  objADOStream.SaveToFile tempname
  objADOStream.Close
  Set objADOStream = Nothing
End if

Set objXMLHTTP = Nothing
Set objFSO = Nothing

That works fine. My next task is to retrieve binary data from an OLEobject field in Access. Modifying the code as follows:

dim conn
set conn = CreateObject("ADODB.Connection")
conn.Open "provider=microsoft.jet.oledb.4.0;data source=C:\db\db1.mdb"

dim rs
dim NewDoc
set rs = CreateObject("ADODB.Recordset")
rs.Open "Tom", conn

rs.MoveFirst

while not rs.EOF
  Set objADOStream = CreateObject("ADODB.Stream")
  objADOStream.Type = 1 'adTypeBinary

  objADOStream.Open()
  objADOStream.Position = 0    'Set the stream position to the start

  objADOStream.Write(rs.fields("ATTACHMENT_FILE").Value)

  Set tempfolder = objFSO.GetSpecialFolder(2)
  tempname = tempfolder & "\" & objFSO.GetTempName

  If objFSO.Fileexists(tempname) Then objFSO.DeleteFile tempname

  objADOStream.SaveToFile tempname
  objADOStream.Close
  Set objADOStream = Nothing

  rs.MoveNext
wend

I get an error on the Write statement:

"Error 0 on line 21, column 3: ADODB.Stream: Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another."

I am not an Access pro, so …

tgreer 189 Made Her Cry Team Colleague

It doesn't adhere to the user expectation model for Windows applications/browsers. No title bar, no CTRL-ENTER for automatic URL completion, no window resizing from any edge, and so on. If I want my programs to have Mac user interfaces, I'll use a Mac. Windows applications should have user interfaces that behave like Windows applications.

tgreer 189 Made Her Cry Team Colleague

If the context of the posting is an answer to a programming question, and words within the posting are converted into links to irrelevant products and services, the context of the post has been profoundly altered.

IntelliTXT does indeed add "whole new blocks of texts", sometimes several, inside of a post, completely unrelated to the context of the post.

But I'll let you have the last word, as we've reached the point where I've had my say and anything else would simply be repetitive. Also, now that blog conversations are uspide-down, it's incredibly difficult to follow who is saying what to whom.

tgreer 189 Made Her Cry Team Colleague

I've already discussed the private vs. public fallacy, and already challenged the argument that payment makes a difference. If you're going to disagree, that's fine, but at least come up with a compelling counter-argument.

The email provider owns their service, so they have the "right" to inject content into messages delivered via their service, or at least that's their viewpoint. That's the same viewpoint Daniweb has: we're advertiser supported and own all site content, so will inject content directly into your posts, whether you endorse or agree with the altered content or not.

I fail to see any difference in the core issue: is it right for a service provider to alter member/user-generated content to push an agenda, product, or service?

tgreer 189 Made Her Cry Team Colleague

That's a red herring, as was Davey's argument about privacy. No one could reasonably claim that Daniweb shouldn't have advertisements. The issue is simple: is it appropriate to alter what someone else has written, injecting content they neither control nor endorse? You agree it's despicable when the "TalkTalk" ISP does it, but rationalize it when you do it. What if I became a sponsor, thus "paying" for Daniweb. Would you remove IntelliTXT from all my posts?

tgreer 189 Made Her Cry Team Colleague

My point remains valid, namely, people draw the line in different places.

There is no expectation of privacy when it comes to email. The nature of email systems, which use a store-and-forward methodology, as well as the nature of the web itself, means that any communication, including emails, we generate, will be stored indefinitely on any variety of servers.

I'm amazed at all the scandals with incriminating emails and chat logs, as if the culprits were simply oblivious to how the internet works.

I'm not condoning what the ISP did in this case. Far from it. It's reprehensible. In an age where we communicate with each other using systems that make it all too easy to alter what we say, we have to learn to respect the integrity of what others type. That responsibility lies with the service providers, be they forum operators or email providers.

The actions of the ISP weren't objectionable because of any expectation of privacy, but because they subverted the intent of the email author. If you feel outraged by that, then you can begin to understand those who react negatively to in-text advertising schemes. I'm not asking for agreement, that ship sailed long ago, but being completely dismissive of my viewpoint and the similarities between altering emails and altering forum postings, that's disingenuous.

But, hey, Davey - I did like the article.

tgreer 189 Made Her Cry Team Colleague

Everyone draws the line in different places. This site, for example, inserts IntelliTXT ads into member-generated content. I think that crosses a similar line. Others do not. I think Google violates several principles by caching websites, and serving cached copies of your content side-by-side with their ads. Most consider that viewpoint radical. While I too firmly believe the ISP crossed the line by adding content to private emails, I find irony in your posting this story here, with adverts for Microsoft Live OneCare and Intel Xeon processors embedded in your article. People who live in glass houses...

tgreer 189 Made Her Cry Team Colleague

I do a lot of travel to perform on-site training. A machine like this might be ideal for that purpose. I'm essentially using a more or less static configuration and loading only training files which change very little between jobs.

A lighter, faster system with a more rapid boot time sounds pretty good to me. Make it a Tablet PC so I can still do "electronic whiteboarding" and I'm sold.

tgreer 189 Made Her Cry Team Colleague

Blackberries and other mobile devices are used by more than "a bunch of suits, lawyers, marketing folk and the idle rich". I'm a workaday developer, working from my home for an international application developer, and I travel extensively. I'm not unique by any means, so obviously find your characterization a bit off.

Sitting in an airport waiting for an email update on an important project so I can keep the project rolling, or emailing out a script to assist a customer who'd otherwise lose a day of work (especially when the alternative is booting the laptop, finding a WiFi hotspot, and paying $9.95 for a "24-hour" usage block (if I'm in this airport for 24 hours, just shoot me)) is a valid, important, and typical use of such a device. An outage is a real disruption, not merely a "gadget addiction". Now, my Bose QC2 noise-cancelling headphones and video iPod, that's a gadget addiction.

As for the concerns about being in constant touch with your boss... as with most electronic devices, Blackberries have an "off" switch.