| Comments

For those that may use my Foxit PDF Previewer (for use with Outlook 2007 or Windows Vista and Windows 7), I wanted to provide a few updates.

Blank white screen previews

I’ve been getting quite a few reports lately about white screen previews while the PDF file renders fine in other readers.  After some research and patient testing with some of you that reported it, it’s been determined that the consistent piece is that the PDFs were documents that were scanned.  These documents in the PDF format contained a different format of encoded images.  The current incarnation of the Foxit PDF Previewer does not have the decoder embedded within the product.  Here is the workaround to get it to work:

  1. Download the JPEG2000/JPIG decoder file directly from Foxit: JPEG200 Decoder.
  2. Take the contents of that ZIP file (fxdecode1.dll) and place it in the directory where you installed the Foxit PDF Previewer (if you accepted all the defaults it will likely be c:\Program Files \Tim Heuer\Foxit PDF Preview Handler)
  3. That’s it !

The decoder library isn’t currently licensed for me to distribute with the previewer and thus this workaround.  It may be possible in a future version that this functionality will be built in, but this is a minor workaround.  The decoder is built into the Foxit SDK for version 3 (the previewer uses version 2).

Outlook 2010 Technical Preview

I have also received some comments from beta testers of Microsoft Office 2010 Technical Preview.  These reports have indicated that the previewer does not work in 64-bit mode for Outlook.  I can confirm this to be true.  I’ve logged a bug with the Outlook developer team to track this issue and will make any modifications necessary to make it work.  Please feel free to subscribe here for Foxit PDF Previewer specific updates (you may also subscribe to my main feed as well).

I would like to remind participants of the Office 2010 technical preview program of any confidentiality agreements they may have agreed to and to respect those in public.  If you are a part of the program, please log an official bug with the Outlook 2010 program channels with regard to Foxit Previewer not working…this will help my cause :-).

That is all.  Thanks for being a user of the software and as always, thanks to Foxit Software for being such a great partner to provide the licensing of the SDK for this software to exist.  They make other great PDF software so be sure to check them out.

| Comments

I subscribe to a lot of feeds.  I read a lot of them, and a lot I skim.  But I also make sure I subscribe to things that break up my day.  Here’s some of my favorites if you haven’t seen them before:

  • FAILblog.org – the classic.  All things wrong.
  • AwkwardFamilyPhotos.com – stop right now and subscribe.  When I’m feeling down I go here.  Seriously.  I’ve also had a photo of my sister I’ve been threatening to post there.
  • UgliestTattoos.com (warning some NSFW) – I’m am seriously amazed what people put on their bodies.  I’ve got tattoos…but I’m mean…for real?
  • Photoshop Disasters – no graphic advertising intern can sneak crap past these guys.
  • There I Fixed It – amazing how resourceful people are ;-)

Just a little bit of syndicated humor does wonders.


This work is licensed under a Creative Commons Attribution By license.

| Comments

A few of us in the Silverlight team have been talking about various things and speculating on how we think the universe works.  We’ve been wondering how people best learn at different levels and how they come to decisions on what tools of their trade to use, etc.  I had a novel idea – let’s ask them.  I’m curious if you might help us stop speculating and get a broad picture of these ideas.  If you would, that would be great and help us understand better where we need to fight for prioritization of certain resources.  Please forward this along to colleagues and not just your super-smartest friends…we all are at different levels and getting only one perspective doesn’t give a broad picture.

Decision resources

Obviously when you go about to start a project you have to decide on what you are going to use and why.  If you are looking at Silverlight, what factors into your decision?

Why did your company choose to adopt Silverlight (or choose not to)?  Was there another technology that was chosen to be better? Why/why not?

What is the most important thing in deciding if Silverlight is right?  Feature set? Existing technologies? Rapid development?  Other reasons?

Learning resources

On learning – how do you best learn?  Do you prefer “atomic” samples?  These are the ones that you can just pop in and figure out a task-based situation (i.e. how do I open a file in Silverlight).  Or do you prefer more of a “lesson plan” approach to things?  This would be a series based on a task (i.e. Build a Media Player in Silverlight).

On medium – in either types of these learning paths, what is your preference?  Video? Written step-by-step guides?  Labs?

On topics – what are the top 3 topics you expect when learning a new technology?  How do you on-ramp yourself when you know nothing about it?  Do you expect to learn the tools first?  Or jump right in to data access?

Feel free to leave comments here on this post.  I think actually asking the people who we ask to learn things will give us a better idea how to best prepare for those who haven’t learned yet…and perhaps still yourself!

| Comments

About 2 months ago I wrote about an experience with an electronics company (LG Electronics USA) and some amazing customer service they were providing.  The bottom line recap was this:

  • I bought a TV about 5 years ago
  • TV started getting wonky about 8 months ago
  • TV was self-declared dead 2 months ago
  • TV was out of warranty by YEARS
  • I called on a whim to LG support
  • They extended the warranty to cover the full cost of repairs

All this process so far, no questions asked.  No feeling of guilt.  No making it seem like they were bending over backwards or that they were really doing me a favor.

To catch up, the repairs have failed.  Personally I think it is a combination of the TV going bad and the authorized repair facility (who had admittedly never worked on an LG unit – so how are you authorized then?) not really putting things in right.  After 3 attempts and 2 new parts (optics unit and some drive board) which appeared to have totaled about USD $1,000 retail (what I would have had to pay), it still wasn’t working.  The repair guy was frustrated and left my house with saying I just put in the parts…you’ll have to call LG.  He was not friendly.

We called LG again thinking they would say that they’ve given their best effort and apologize and we’d be on our way.  Not so.  Again, rather than making us feel bad at all the next conversation shocked me…it was along the lines of this: We’re so sorry Mr. Heuer you’ve had this problems.  We don’t want to inconvenience you anymore.  We’d like to replace your TV with a new one. 

In case you didn’t hear it, that was the sound of me picking my jaw up off the floor.

Wow.  Their service just keeps getting better.  We had to do some verification by sending in the label from our old unit (via FedEx that they paid for).  I got a call the next business day after delivery was confirmed.  The call was simple: here are the three models you can pick from.  Wow…choice even!  Since they didn’t have my model anymore I could choose a 50” plasma, 47” plasma or a 42” LCD (our original was 44”).  Holy cow…I had to pinch myself.  I chose the 42 (retail value $1500) because of where it was going and didn’t need anything more.

This whole process has really just been simply amazing to me.  I cannot believe how this company is really taking customer service seriously.  Bravo LG, bravo.

| Comments

I saw a note on Twitter come through yesterday about building pixel shaders for Silverlight in Visual Studio.  The question, from @blamborn was:

Does anyone know if there is a Shader Effects BuildTask like the #WPF one here http://bit.ly/gCkNT only for #Silverlight?

I replied that you can use the same build task and thought I had written my work around on how to do that, but apparently I never clicked published somewhere along the line.  I recall doing some work for this for a presentation a while back on VSLive and started to write it up.  Here are hopefully some helpful knowledge around the subject.

Option 1: Compiling using DirectX Libraries

One option you can do is to use a pre-build command for your project in combination with the DirectX SDK.  What you really need out of the DirectX SDK is a tool called fxc.exe.  This is a compiler for the HLSL code for the pixel shader code you write.  The download is 500MB.  Yeah, big.  Once you have it installed you can put a pre-build command on your Visual Studio project with something like this:

   1: "C:\Program Files (x86)\Microsoft DirectX SDK (March 2009)\Utilities\bin\x86\fcx.exe" 
   2:     /T ps_2_0 /Fo "$(ProjectDir)ShaderEffect1.ps" "$(ProjectDir)ShaderEffect1.fx"

Now keep in mind your installation directory might be different, but you should get the gist of it.  The result of this command is that you’ll get a <Filename>.ps file that you will include in your project.  The .ps file, in fact, *IS* your pixel shader…that’s really the only thing your Silverlight project cares about!  The build command doesn’t automatically make it a part of your project though, so you’ll have to ensure that after it builds you use the “show all files” feature in Visual Studio and include it in your project.

Option 2: Using a build task

Another option is to use a build task in your project.  For Windows Presentation Foundation (WPF) developers, this is what is easiest and doesn’t require the massive 500MB download.  What is cool is that we can use the same build task for Silverlight.  Awesome right?  Well, yes and no.

It’s awesome that it works.  What is not awesome is the setup.  Allow me to walk you through my steps.  It’s a bit of hackery admittedly.  If anyone is a super Visual Studio extensibility wizard and wants to contribute knowledge to me on extending it to my liking, I’ll send you a virual Mt. Dew!  Here’s my steps otherwise.

Install the WPF Build tasks!!!  You can get them from here (Shader Effects Build Task and Templates).  Run the installer.  These steps assume you have them already!!!  You don’t need the templates, but if you want you can install them too – they are for WPF.  You’ll install my template as the next step.

1. Get the VS template I created for Silverlight Pixel Shaders.

I created an item template for Silverlight projects so that you can do Add Item…Silverlight Pixel Shader to your project.  Once you have this installed (just double-click on the VSI and follow the steps) you will see that option.

The template provides you with the right files that get added as well as follows the requirement for a pixel shader being a resource in your project.  You’ll notice after you add the item (let’s say you kept the default name) that the code will show:

   1: static ShaderEffect1()
   2: {
   3:     _pixelShader.UriSource = new Uri("/SilverlightApplication29;component/ShaderEffect1.ps", UriKind.Relative);
   4: }

This is the best practice for a pixel shader.  Note that my project name is SilverlightApplication29, but the template will use your projects name, of course.

2. Hackery 1: Open the **proj file for your Silverlight application in a text editor like notepad.

Yes, I know.  You are cursing me now.  I agree, if the tool (VS) is awesome why do I have to do this step?  I’ve been trying to understand myself how an item template can actually do all these things for you…again, if you are an extensibility expert, let me know!  But for now, bear with me.

In the **proj file (csproj or vbproj) add the following information right after the Import node in the file:

   1: <ItemGroup Condition="'$(BuildingInsideVisualStudio)'=='true'">
   2:     <AvailableItemName Include="Effect" />
   3:   </ItemGroup>
   4:   <UsingTask TaskName="ShaderBuildTask.PixelShaderCompile" AssemblyName="ShaderBuildTask, Version=1.0.3072.18169, Culture=neutral, PublicKeyToken=44e467d1687af125" />
   5:   <Target Name="EffectCompile" Condition="'@(Effect)' != '' ">
   6:     <PixelShaderCompile Sources="@(Effect)">
   7:       <Output TaskParameter="Outputs" ItemName="Resource" />
   8:     </PixelShaderCompile>
   9:   </Target>
  10:   <PropertyGroup>
  11:     <!-- Add effect compilation to the PrepareResourcesDependsOn so that the effect fx  get compiled before resources are collected -->
  12:     <PrepareResourcesDependsOn>EffectCompile;$(PrepareResourcesDependsOn)</PrepareResourcesDependsOn>
  13:   </PropertyGroup>

These properties enable you to see the “Effect” build task in the properties for your .fx files in the project.  Save the proj file and go back to Visual Studio.  You should be prompted to reload – go for it.  You may see a file named Effect with a warning icon on it.  For now, ignore it.  It’s admittedly an artifact of this hackery.  It will look like this:

Project solution explorer

Now that you have both of these steps you can add a new pixel shader (using my template of course).

3. Change the .fx file’s properties to Build Action: Effect.

Once you have added a shader library (using my template) to the project, select the .fx file (which is your HLSL code) and look at the properties dialog for the file.  Change the build action to the new item Effect.

Build action property

Build your project.

4. Hackery 2: Refresh the view all files and add to project

After the build, refresh the view all files feature and you should see your .ps file.  Right click on that and say Include in Project.  It should be included as a Resource build action automatically, but if it isn’t, make sure it is.

That’s it (as I say with a snarky smile).  I know it seems like some hacking….and it is.  But if you don’t want to download the DirectX SDK, you can still re-use the WPF build taks with a little project file modification.

If you don’t have a clue what a pixel shader is, check out this video.

Hope this helps!