Welcome to Atalasoft Community Sign in | Help

The Docubot Season starts up; Proves We’re Better Engineers

By ELAINE GORHAM Copyright 2010 Atalasoft

NORTHAMPTON, MA – Picking up where they left off last season, the Docubots began the 2010 softball season by losing their opening game, 16-0.  A diminished line-up, missing shortstop/Support Manager Elaine Gorham, outfielder/VizitSP Architect Jacob Lauzier, outfielder/VP of Engineering Lou Franco, and more, failed to break out against Jason’s Home Repair, managing only four hits against a tough ball club.

A bright star in the early season is returning Rookie of the Year/Microsoft MVP/Pitcher Rick Minerich.  Despite the hit barage against him, very few runs were earned, keeping the Software Architect’s ERA to a minimum.

1st baseman/Senior Account Executive Rick Goudey, along with newcomers centerfielder/Marketing Communication Manager Eric Deutchman, 2nd baseman/Developer Support Engineer Jake Mitchell, and 3rd baseman Elyse D. gathered the hits for the Docubot squad.

Though the team reeled from giving up 9 runs in the 2nd inning, they came back to shut down the opposition in the third.  Mercy-ruled in the bottom of the fifth, the Docubots look forward to their home opener on May 18th, against newcomers The Storm.

Posted by Elaine | 2 Comments

Communication, Part 2.

What word can be used as a noun, adjective, verb, adverb, and even a pronoun?

Every other Friday we have a staff meeting, where each of our department heads talks about what’s going on with their group… status updates.  In the beginning of March, we were all told March was going “to suck.”  And it did, but we have so much to show for it: a new website, rebranding, DotImage 9.0, Vizit Reader, great showing at AIIM.  The hours put into March and early April in order to prepare for all of these caused more than a few gray hairs to spring up around the office.

At last Friday’s meeting, we spoke about the results.  More than once I heard the phrase “it (or you guys or said product) was f**king awesome”.

Now, in no way am I a prude about speech.  I have said this phrase a few times.  In fact, I have a mouth like a sailor, and it is only by the strongest of restraints do I not use that language over the phone.

Okay, I’ll admit to using it after a phone conversation.  Not even Mother Theresa could do software support without saying the word once in a while.

To the point, though.  In my last post I talked about filler phrases – words that we use when we have nothing better to say.  Granted, the f-bomb is sometimes the perfect exclamation or adjective for a situation, but we tend to overuse it.  It proves we’re one of the cool kids.  It proves we’re not our parents.  It proves we’re bad motherf…

Oops.

Is it really the best way we can express ourselves?  Instead of “the website is f**king awesome” (which it is), how about remarkable, amazing, extraordinary, wonderful, stupendous, stunning, or fantastic?  (Thank you, Microsoft Word Synonym finder.)

Unfortunately, none of those pack the power of the f-bomb.

I was having trouble finding an ending to this post until today, when I attempted to install the release version of SharePoint Foundation.  I couldn’t find an alternative word during the experience, no matter how far I dove into the thesaurus.  Let’s just say that remarkable, amazing, extraordinary, wonderful, stupendous, stunning and fantastic are not going to express my feelings adequately.  Sometimes everything can be summed up perfectly in just one little four-letter word.

:-)

Posted by Elaine | 1 Comments

Communication, Part 1.

“Actually.”

“Pretty Much.”

“You know.”

“For whatever reason.”

“Basically.”

Do you use these words and phrases?  Do you know they give signals to your audience that you either don’t know what you’re talking about, or that you’re unprepared?

I attended a workshop recently where I felt very, very sorry for one of the speakers.  In the past, this speaker has given excellent talks, and is very educated about the subject.  Unfortunately, the lack of preparation was evident by the way this person spoke:

“So, basically, you know, you can actually do this by doing this, and for whatever reason, the people who put this together basically, you know, made it so you would actually do this.”

Think about how painful it is to read that sentence.  After listening to the speaker for ten minutes of this, I was ready to stab my ears with my pen.  After fifteen minutes, I tuned the speaker out and was no longer listening.  I had three 8 1/2 x 11 pages, front and back, of doodles after the full hour had passed by.

We use these insertions in every day speech – I’ve caught myself using “actually” on the phone while speaking with a customer.  The moment the word left my mouth, I realized that, if he was aware of the word, then his perception of me would quickly go from educated professional to valley girl (which is highly insulting – I’m from the south).  These insertions can be a stalling static or an indication of a lack of confidence when speaking.  Sometimes they can just be habitual.

I pause a lot when I speak; so much so, that people try to fill in the gaps and guess what I’m trying to say.  It’s irritating to both me and my listener, but I wonder how much worse it would be if I consistently inserted a “filler-phrase” to bridge the gaps.  Most likely, the content of my speech would get lost in the fluff.  At least when I pause, people who know me well have gotten used to it enough that they realize I’m just gathering my thoughts.

Posted by Elaine | 1 Comments

A personal note.

Page 1, paragraph 3, sentence 1 of Seth Godin’s Tribes reads “A tribe is a group of people connected to one another, connected to a leader, and connected to an idea.”

I could not get this out of my head Saturday.

I play ice hockey, and at 3:10 PM this past Saturday, I found myself playing goalie for a team that was not my own, under the worst set of circumstances.

“How did I get here?” was the second thought going through my mind.  I was on the ice because of the multitude of tribes to which I belong.

First, Atalasoft.  Our small tribe all working together to be leaders in our industry.  Part of that tribe includes Steve, our chief architect.  Because of Steve, I’m involved with another tribe, the Massachusetts Down Syndrome Congress.  I play hockey for them in a charity game to raise money for awareness.

Because we play against former NHL players, I joined a women’s team out of Boston, the Raging Storm, to get in playing shape.  So there are more tribes – athletes, women athletes, hockey players, goalies – to name a few.  Through this tribe, someone passed my name to another team who was looking for a goalie to play for them this past weekend in the Fitchburg Have A Heart tournament.  I joined another tribe, the Panthers.

While dressing for our first game, we heard devastating news.  The goalie for the tournament host team had chest pains in the second period of her game.  She refused to leave the ice, not recognizing the seriousness of the situation.  She finished the game, returned to the locker room, and had a massive heart attack.  She did not survive.

Her team decided to continue in the tournament, as that is what she would have wanted.  When I heard they were playing, I approached the captain and let her know I would play for them if they needed me.

She informed me that they did need me for their third game of the tournament, and so I joined their tribe.

While dressing for that game, the team let me know that they rarely won, and that I shouldn’t expect them to score more than one goal, if that even.  Their faces were heartbreaking to look at – they were in grief and in shock, eyes red and puffy – but they put on brave faces.  They bonded together over the tragedy, and connected with each other over their (and their goalie’s) love of hockey.

We took the ice.  I have never wanted to win so badly in my life.  I have played at the national level, USA Hockey B division, but that was nothing compared to the pressure I felt playing behind these women.

We won 5-3.

It was the hardest game I have ever played, but will go down in my mind as the best game I have ever played, both physically and mentally.

Everything we do in life affects everyone we know, even if the details are so small not to be noticed directly.  Every one of my customers will interact with someone who is improved.  Each tribe I am a member of is now stronger, because I am stronger for the experience.

Thank you, Shelly Leclier.  I would say rest in peace, but I know you’ll find ice time in heaven.

Posted by Elaine | 0 Comments

42 things you can do to get bad customer service

It’s been a while since I posted anything campers.  I actually only have five suggestions…
1.  Be unprofessional.

We have had voicemails that made us cringe (like the customer who flushed the toilet – we don’t think he realized he had dialed the phone… at least, we hope he didn’t know), and people with children screaming in the background.  No excuse for the first case.  The second case – we sometimes work from home as well, and understand that those things can happen sometimes.  In fact, I have two dogs, and one of them hates when I am on the phone and tries to talk to me himself.  If you hear “A-ROO-ROO-ROO” in the background when talking to me, please know it’s not me howling into the speaker.  However, when he does that, I make sure to quiet him as soon as possible with a rawhide or a biscuit.  Point is, it happens only once.

Secondly, ending your support case descriptions with “U giv code, plz?  KTHXBAI.”  Really?  Show me your resume’.  Tell me how you got a job.  I expect to be greeted by English (and I will be quite lenient with non-English speakers using a translator), but text speak should be used on the WOW forums or with your teenage little brother over IM.

2.  Complain, complain, complain.

When I first started with Atalasoft, my eyes glazed over when trying to read the documentation.  Now, it’s the easiest thing in the world for me to find what I’m looking for.  (Practice, practice, practice.)  I understand that a lot of people have trouble with it.  But, if over the course of a 20-minute conversation, you spend 19 minutes complaining about the documentation, then we’ve wasted 18 minutes.  You could have complained for 1 minute and I could have helped you in 1 minute.  Which one sounds more productive?

Don’t tempt me to send you to a different support group.

3.  Lie, cheat, steal…

Software piracy is an unfortunate way of life.  From Windows to Adobe to DotImage, people are always on the hunt to get around paying for products they use.  We can’t stop everybody, and we’ve put in quite a few measures to prevent people from taking advantage of us.  However, people do what they do, and then expect to get the same service as people who legitimately pay for the product and service.  When they get caught, they ask why they’re not receiving timely service.  I think the answer is obvious – you get what you pay for.

4.  Refuse to help us help you.

We are not mind readers.  If we were, we would not be engineers.  In fact, I would be going on game show after game show (“No whammies… no whammies… STOP!”)  When we ask you questions, when we make suggestions, it is because we are trying to determine the issue, not waste your time.  We do not know the answer to every single problem immediately – sometimes we need to investigate down to the real cause of the problem.  Never say “this doesn’t work” and leave it at that.  If I ask you a question, and you do not answer it, I’m going to repeat the question until you do.  If I make a suggestion, and you don’t try it, I’m going to repeat the suggestion until you do.  We don’t follow a script, and no one develops the exact same application.  We treat you like an individual, just like everyone else.

5.  Expect us to debug your code.

As an engineer for a software company, my family can afford more than ramen noodles every night.  As an engineer for a SMALL software company, we’re not eating prime rib every night, either.  So when a contract programmer making 5 times more than me per hour expects me to pore over their code to find where they forgot to set something to true, I tell them politely that that’s not what I do.  Give a college kid $20, and I’m sure he’ll do it for you.  Be careful, though – he might take your place on the next contract.

Which leads to… one thing you can do to get great customer service.

Be nice.

If you’re nice, we might overlook the fact that you’re popping gum into the phone.  If you’re nice, we might step you through the documentation and show you how we find things quickly.  If you’re nice, we might hint that you can find your answer in a particular demo.  If you’re nice, we might make other suggestions for you to try.  If you’re nice, we might start a go-to meeting and give you a second set of eyes.

It seems that a little over a year ago I posted something similar with the same conclusion, but it can’t hurt to repeat this message until everyone gets it.

Be nice.  (I was going to link to a YouTube clip of Patrick Swayze’s “Be nice” speech in Roadhouse, but, uh, the language wasn’t very… nice.)

Posted by Elaine | 0 Comments

#10 – If you ever wanted to see Jar Jar Binks differently -- SetAlphaColorCommand

Okay, chances are, if you’re reading this blog, you know a little something about computers, and add to that you might like science fiction movies, then on top of that you might like the Star Wars movies.  Without getting into the political debate of “should Jar Jar have been sacrificed to the Sando aqua monster just for giggles”, if you had a picture of Jar Jar (without infringing upon copyrights) against a green background, and you wanted to put Jar Jar against different backgrounds, you could use the SetAlphaColorCommand to turn the green transparent.

All kidding aside, the SetAlphaColorCommand lets you pick a color in your image, and within a tolerance, turns that color transparent.  You can set the alpha value you want to place for the color (maybe you don’t want the color fully transparent).  Also, if your original image is not in an alpha-supporting pixel format, it will be automatically changed.

Since a picture is worth a thousand words, here is the command in action.

Before:


After, with the color set to Aqua and a tolerance of 15 (set in the DotImage Demo, because of Windows Live Writer’s issue with transparency):

 

Have fun with this one.  Try not to do anything *too* mean to Jar Jar.

By the way, the Wednesday Webinars are in both the morning and in the evening.  Check out the education page to sign up.

Posted by Elaine | 0 Comments

Where, oh where, have my Blueprints gone?

Recently posted on MSDN.

And on Michael Lehman’s blog.

(Recently being May.  Where the heck have I been?)

I am so happy to that the Blueprints (or whatever they will be called next) aren’t completely dead.  I may have uttered a few obscenities (and thrown squishy objects) when the Codeplex site bit the dust.

Anyone who works in support knows the day-in/day-out frustrations of not being able to get the message across to people, and Blueprints was surely making that easier for programming concepts.  We’ll take all the help we can get, especially if it’s something cool and automated.

My only fear now is that Michael says he’s working closely with the Visual Studio team.  Does that mean the next incarnation of guidance tools will be built into VS2010, leaving all my VS08 customers behind?

Good luck, Michael – I’ll be first in line when the new Blueprints are released… or I’ll be two months late.  Either way, I’ll be shouting from the rooftops when I get to use them again.

Posted by Elaine | 0 Comments

#9 – If nougat and soy were ever to touch, we’d all be vaporized – the ReplaceChannelCommand

Ingredients:

  • 2 AtalaImages (one continuous color, one grayscale)
  • 1 ReplaceChannelCommand
  • Salt and pepper to taste

Directions:

In a Visual Studio project, create two AtalaImages, one for the color image and one for the grayscale image.  Set aside.  Create one ReplaceChannelCommand.  With the grayscale AtalaImage, set it to the channel property you wish to replace (you can choose any combination of the four channels, or set them to null if you don’t wish to change them).  Apply to the continuous color AtalaImage.  Display in viewer, or save to a file.  Enjoy.

The ReplaceChannelCommand replaces the channel values of a color image with the values from an 8-bit grayscale image.  The images don’t have to match – it just uses the values from the gray image – but they should be the same size.  One application of this would be to set the alpha channel of an image for masking.

Here is an example of this in use for sharpening an image:

Color Image:

city_color

Gray Application:

city_gray

Results, replacing channel 2:

replacechannel2

Notice how much easier it is now to see the streets of the city.  And what city would it be?  The first five people to email me the correct city win an Atalasoft T-shirt.  Employees (past and present) and family members of Atalasoft are ineligible.  Email me at Training at Atalasoft dot com (don’t forget to put an address of where to ship the shirt and the shirt size you prefer).

Posted by Elaine | 0 Comments

#8 – The best way to see a MiG 28 do a 4g negative dive – the InvertCommand

In the last few command entries, I have highlighted some commands that, through adjusting channels or looking up new values in a table, you can invert your image.  But who has time to do all that?

Instead, we bring you the InvertCommand.  Black becomes white.  Yellow becomes blue.  Pink becomes a darkish green.   Human sacrifice, dogs and cats living together… mass hysteria.  Hmm… maybe we make things TOO easy sometimes.

In most cases, you’ll never need to worry about channels or regions with this command, but the option is there to only process certain channels or only a specific region of interest.  It is available for DotImage Photo, Photo Pro, and Document Imaging.

Before:

Chaotic_Light_3D

After (all channels processed):

inverted_chaotic

A shout-out to Dave Cilley, our AJAX developer, who provided the images I’ve been using in these posts.

Posted by Elaine | 0 Comments

#7 – Giza, Babylon, Olympia, Ephesus, Halicarnassus, Rhodes, and Alexandria – the FlattenAlphaCommand

Okay, so the title of this blog post is really just a cheap attempt at misdirection.  After all, what more can be said about the FlattenAlphaCommand than:

The FlattenAlphaCommand blends the transparent areas of an image with a solid color to remove the alpha information.

In other words, if you have an image with a transparent background, you can give it a color background.  There’s only one property to manage – Color – which you can specify in the constructor.  Make sure that the image loaded actually has an alpha channel (or the command will throw a BadPixelFormat exception).  The resulting image’s pixel format will be 24 bits per pixel BGR.

The before and after shots of this are going to be wholly unremarkable.  Also, I’m limited by the blog utility I use from loading the original, transparent png image, so I’ll show screen shots of the DotImage Demo instead.

Before:

image

After, with Color set to OldLace:

image

The next command is one that can produce some nice, funky effects, or correct a nice, boring document: the InvertCommand.

And, as always, remember the Webinars, Twitter (Atalasoft and me), become a Facebook friend, and the Alamo.

Posted by Elaine | 0 Comments

#6 – Perfect – The ApplyLutCommand

Also known as Aaron to #5’s Ruth.

The first question here is “What is a lut?”  L.U.T. stands for Look-Up-Table, which is a way to replace values in a program by “looking them up” in an array or table, instead of calculating the values.  The most classic example in computing is looking up trigonometric functions.

In imaging, though, you can use an LUT to transform the individual pixels in an image.  It’s very similar to the AdjustChannelCommand, but instead of calculating the adjustment of the channels, it gets the new values from the channels you pass in.

Each channel can take a byte array or integer array of new values, or you can set an LUT to null if you don’t want to alter that specific channel.

  1. Channel1 – the Red Channel
  2. Channel2 – the Green Channel
  3. Channel3 – the Blue Channel
  4. Channel4 – the Alpha Channel

If you have the Photo Pro or Document Imaging level of DotImage, you can use the Region of Interest rectangle with this command.  Also, this command performs IN-PLACE on the image you pass to it.

Here’s the command in action.  Before:

Rosebud

After.  I reversed the channel for each rectangle.  Northwest is Channel 1 (Red), Southwest is Channel 2 (Green), Northeast is Channel 3 (Blue).  Southeast is Channels 1, 2, & 3, giving an inverted section:

applyLut_rose

Next, we find out which images make a better door than a window with the FlattenAlphaCommand.

Don’t forget about our DotImage Webinars (where you can build these image commands and more into a workable application).

You can also follow Atalasoft and me on Twitter, and become a friend of Atalasoft on Facebook!

Posted by Elaine | 0 Comments

#5 – This one’s for the starfish – the AdjustHslCommand

Yesterday, we adjusted the colors in our image by targeting the channels.  Today, we adjust the image’s hue, saturation, and luminosity with the AdjustHslCommand.

I could practically copy yesterday’s post to today – you need a color image, the Region of Interest requires Photo Pro or Document Imaging, and you can adjust levels by percentage (-100 to 100) or a literal value (-240 to 240). 

The break down of the properties:

  1. AdjustByPercentage – Set to ‘True’, you adjust by percentages.  Set to ‘False’, you adjust by a literal value.
  2. Hue – refers to the pure spectrum colors
  3. Saturation – the difference of a color against its own brightness
  4. Luminance – the intensity of light in a given area
  5. RegionOfInterest – If you don’t set this, your entire image will be processed.

Before:

Rosebud

After (Northwest – hue: –50%, Southwest – saturation: –50%, Northeast – luminance: –50%, Southeast – all three: –50%):

adjusthsl_rose

Don’t forget to make a clone of your image if you want to keep the original AtalaImage intact (remember the in-place processing).

Tomorrow’s command is fun – we get to modify an image pixel by pixel.

Also, don’t forget about our DotImage Webinars, and you can follow me on Twitter.

Posted by Elaine | 0 Comments

#4 – No Fibonacci Here – The AdjustChannelCommand

Too much blue?  Not enough blue?  Get rid of blue altogether?  The AdjustChannelCommand lets you manually adjust the colors in your image by adjusting the channels.  It is available for DotImage Photo, Photo Pro, and Document Imaging.

The command lets you adjust the 3 color channels, plus the alpha channel (which is helpful if you are trying to overlay one image onto another).  You can adjust by percentage (-100 to 100) or by a fixed value (-255 to 255).  A value of 0 does nothing.  Also, you can adjust all channels at once.

By the way, you need to have a color image.  I don’t want to hear complaints if you are trying to adjust the red channels on a black and white image.  That’s just silly.

This is also our first command to introduce the Region of Interest.  Using a rectangle, you can select only part of the image to adjust, as I’ve done in the example below.  This feature requires a Photo Pro or Document Imaging license.

Properties to play with:

  1. AdjustByPercentage – Set to ‘True’, you adjust by percentages.  Set to ‘False’, you adjust by a literal value.
  2. Channel1 – the Red Channel
  3. Channel2 – the Green Channel
  4. Channel3 – the Blue Channel
  5. Channel4 – the Alpha Channel
  6. RegionOfInterest – If you don’t set this, your entire image will be processed.

Before:

Rosebud

After (with a RegionOfInterest set and Channel2 = –100, reducing the green):

adjustchannel2_rose

Also, and let me write this in big, sparkly letters – THIS COMMAND PERFORMS IN-PLACE!  When you run this command, you will change your image.  If you want to keep your original command intact, make a clone of it to run the command on.

Tomorrow is the AdjustHslCommand, which is going to look a lot like today.

Posted by Elaine | 0 Comments

#3 – Between e and Pi – The ChangePixelFormatCommand

Enter the ChangePixelFormatCommand.  It changes your image’s pixel format.  It is available for DotImage Photo, Photo Pro, and Document Imaging.

You may say, “Elaine, why would I use that when I can just call GetChangedPixelFormat from my AtalaImage?”  And I would reply, “Ummm… one moment,” and scurry off and ask Steve, and come back and say to you, “Why?  Why?!  How could you not know that it’s used when chaining commands together?”  Sheesh.  Some people…

Honestly, campers, I have never used the command until today when putting together this post.  It’s very useful if you want to perform a mixture of basic image commands and some of the Advanced Document Cleanup commands (as the ADC commands work best on bi-tonal images).  Changing the pixel format is also helpful when trying to reduce the file size of your image.  Less bits per pixel will result in less data to save.

Things to note:

  1. Your new pixel format should not match your old pixel format.  Test for this!  You’ll receive a nasty ‘Source and destination pixel formats cannot be equal’ exception thrown.
  2. If you reduce the bits per pixel, you will reduce the available colors in your image.  2 vs. 16 vs. 256 colors…
  3. Be aware of the alpha channel.  If you have it and get rid of it, previously transparent areas may “suddenly” show up.
  4. 0 means black in grayscale and BGR; 0 means white in CMYK.
  5. 1 bpp indexed is not necessarily black & white.  It just means that you’re using a two-color palette.

Here’s an extreme example of this at work.  I am setting the property NewPixelFormat to PixelFormat.1bppIndexed.

Before (image’s pixel format is 24 bits per pixel, BGR):

Rosebud

After (image’s pixel format is 1 bit per pixel):

rosebud_1bppindexed

This reinforces what I said about 1 bpp indexed – my palette here is not black and white, but two shades of gray.

Our next set of commands are going to be all about Channels, otherwise known as playing with colors without paying for mushrooms.

Posted by Elaine | 0 Comments

#2 – One for each hand – The AutoCropCommand

Sure, this one should be pretty straightforward.  As the name implies, this command automatically crops the solid color border from the edge of an image.  It is available for DotImage Photo, Photo Pro, and Document Imaging.

Setting parameters wouldn’t be very… “automatic”… now, would it?  But there are some details we can set for this one:

  1. OverrideColor – you can set a specific color to represent the image’s “empty” space.
  2. OverrideIndex – similar to the OverrideColor, this sets a palette index value instead of a color
  3. Tolerance – this is the percentage used to locate the edges.
  4. UseMedianFilter – lets you clean up the image a little bit before getting the result dimensions .(good if you have some noise or artifacts keeping you from getting the entire edge cropped).

Here’s the command in action.  I’ve left all of my settings as default values except for Tolerance, which I set to 1 (because 0 results in nothing).

Before (overall image’s size is 640 x 478 pixels):

Rosebud_WhiteBorder

After (overall image’s size is 512 x 359):

autocropcommand_rose

 

Not much difference to show off here, other than to take note that the cropped image is not resampled to the original size.

Next up is the ChangePixelFormatCommand.  Hardly ever used, but very important to people everywhere.  Like sporks.

Posted by Elaine | 0 Comments
More Posts Next page »