Monthly Archives: April 2007

Still related with Silverlight

Lutz has released a new version of Reflector with Silverlight support (if you already downloaded a previous version, just run the update checker if you don”t get prompted for an automatic update). There”s alsoe  monotone demo app for silverlight. Go get it!

SDKs for Silverlight available!

What can I say? I should have complained earlier! :,,)

Silverlight SDKs links broken

damn! there goes all the joy!

Silvelight beta is out!

According to Mike Harsh, there”s a new release with .NET support. It seems like now we”ve got a new site, new forums and new samples. Everything is concentrated on a single page. It”s time to start looking at Silverlight!

Yes, I have another sister…..

Twins, in fact….    Sarah, the other sister, not yet mentioned on this blog, just called at gave out to me that Amanda had been mentioned but she had not.


So here it is Sis…   I am spreading the word that you too are intelligent, wonderful, important, and….   now known to the world!   The thing is, you will now need to fight off all the ubergeeks that come here and read this thing…


As you said, you have done amazing things too….     Amanda produces amazing hairstyles, you produce amazing children!


AbingtonHouse 063

Luke, Marc and Rachel 21102006 006


 

Silverlight: simplifying the FilmStrip sample

Today I”ve started looking at the samples that accompany Silverlight. I started with the FilmStrip sample. After looking at it for some minutes, I thought that maybe I could simplify the code needed to achieve the image transitions. If you look at the original code, you”ll see that there are several storyboards that set up each transition. you”ll also see that they”re really duplicates and that the only thing that changes is the value of the Value property applied to the SplineDoubleKeyFrame element. In fact, if you pay attention to the storyboards, you”ll see that each storyboard decreases (or increases, depending on the direction you follow :) ,,) the value by 1024.

So, what”s happening here is that these extra lines of XAML (for each transition) could be reduced to one storyboard whose value is changed during the click of the next/previous button. To achieve this, you should start by removing all the extra storyboards and kepp only one. In my case, I”ve ended up with this xaml (i”m only putting the inner loadedRoot canva”s triggers xaml):

<Canvas.Triggers>
 <EventTrigger RoutedEvent=”Canvas.Loaded”>
  <EventTrigger.Actions>
    <BeginStoryboard>
       <Storyboard BeginTime=”5″ Duration=”00:00:01″ x:Name=”story”>
             <DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetProperty=”X”  Storyboard.TargetName=”slideX1″>
                <SplineDoubleKeyFrame
                       Name=”anim1″
                       KeySpline=”0.7,0,0.4,1″ Value=”0″ KeyTime=”00:00:00.8″/>
           </DoubleAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetProperty=”X” Storyboard.TargetName=”slideX2″>
                <SplineDoubleKeyFrame
                     Name=”anim2″
                     KeySpline=”0.7,0,0.4,1″ Value=”1024″ KeyTime=”00:00:00.8″/>
           </DoubleAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetProperty=”X” Storyboard.TargetName=”slideX3″>
                <SplineDoubleKeyFrame
                    Name=”anim3″
                    KeySpline=”0.7,0,0.4,1″ Value=”2048″ KeyTime=”00:00:00.8″/>
         </DoubleAnimationUsingKeyFrames>
         <DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetProperty=”X” Storyboard.TargetName=”slideX4″>
              <SplineDoubleKeyFrame
                  Name=”anim4″ 
                  KeySpline=”0.7,0,0.4,1″ Value=”3072″ KeyTime=”00:00:00.8″/>
         </DoubleAnimationUsingKeyFrames>
         <DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetProperty=”X” Storyboard.TargetName=”slideX5″>
             <SplineDoubleKeyFrame
                Name=”anim5″
                KeySpline=”0.7,0,0.4,1″ Value=”4096″ KeyTime=”00:00:00.8″/>
       </DoubleAnimationUsingKeyFrames>
       <DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetProperty=”X” Storyboard.TargetName=”slideX6″>
          <SplineDoubleKeyFrame
              Name=”anim6″
              KeySpline=”0.7,0,0.4,1″ Value=”5120″ KeyTime=”00:00:00.8″/>
       </DoubleAnimationUsingKeyFrames>
      <DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetProperty=”X” Storyboard.TargetName=”slideX7″>
         <SplineDoubleKeyFrame
             Name=”anim7″ 
              KeySpline=”0.7,0,0.4,1″ Value=”6144″ KeyTime=”00:00:00.8″/>
      </DoubleAnimationUsingKeyFrames>
      <DoubleAnimationUsingKeyFrames BeginTime=”00:00:00″ Storyboard.TargetProperty=”X” Storyboard.TargetName=”slideX8″>
          <SplineDoubleKeyFrame
               Name=”anim8″ 
               KeySpline=”0.7,0,0.4,1″ Value=”7168″ KeyTime=”00:00:00.8″/>
       </DoubleAnimationUsingKeyFrames>
     </Storyboard>
    </BeginStoryboard>
  </EventTrigger.Actions>
 </EventTrigger>
</Canvas.Triggers>

As you can see, I”ve changed the name of the storyboard to story and I”ve named each of the SplineDoubleKeyFrame so that we can change its Value during each button click. As I”ve said, in the initial sample each storyboard would be an exact copy of the previous: the only thing that changes is the value of Value property (and this value is decremented by 1024 in each element). With this knowledge, we just need to build a function that increments or decrements each of the animation by the necessary factor:

function updateAnims( factor ){
   for( var i = 1; i < 9; i++ ){
        wpfe.findName( “anim” + i ).Value = wpfe.findName( “anim” + i ).Value – factor;
   }
}

Changing the upForward method to use the new strategy is really simple:

function upForward (s,e) {
  if (currentSlide < 8) {
     currentSlide++;
     var factor = 1024;
     updateAnims( factor );
     wpfe.findName(“story”).Begin();
     if (currentSlide < 8) {
        wpfe.findNa me(“forwardButton”).fill = “#FF000000″
        wpfe.findName(“forwardButton”).stroke = “#FFAAAAAA”
    }
    else {
        wpfe.findName(“forwardButton”).fill = “#FF000000″
        wpfe.findName(“forwardButton”).stroke = “#FF222222″
    }
  }
  wpfe.findName(“backButton”).fill = “#FF000000″
  wpfe.findName(“backButton”).stroke = “#FFAAAAAA”
}

All that is needed is to update the animations before running them (this is only possible because the animation retains its final value after beeing run). You”ll also need to change the upBack method so that it updates the animation values with negative values:

//….previous code removed
currentSlide–;
var factor = 1024;
updateAnims( -factor );

wpfe.findName(“story”).begin();

While performing these changes, I”ve also noticed that each image is downloaded through its own Downloader object, which also seemed a waste of resources. After looking at the docs, it seemed like I couldn”t use only one downloader for all the images because loading ad image could only be done by setting a path or associating a Downloader with it. I though that if I associated a downloader with an Image and then downloaded a second image with the same downloader, that isecond mage would be rendered in the associated Image control (ie, i thought that callluing the SetSource method would result in creating a binding between the Image and the Downloader). Since I didn”t find any way to explicitly set the bytes of the image, I thought that those extra-Downloader objects were really necessary. Even though it seemed like I was wasting time, I”ve changed the code so that it only used one downloader. The first thing I did was create a global method with the following code:

function __getDownloader(){
  if( downloader == null ){
      downloader = wpfe.createObject(“Downloader”);
      downloader.downloadProgressChanged = “javascript:downloadProgressChanged”
      downloader.completed = “javascript:downloadCompleted”
  }
  return downloader;
}

And the, I”ve replaced these lines (in the downloadAssets and downloadCompleted methods):

downloader = wpfe.createObject(“Downloader”);
downloader.downloadProgressChanged = “javascript:downloadProgressChanged”
downloader.completed = “javascript:downloadCompleted”;

with this one:

downloader = __getDownloader();

After opening the page in the browser, I though that I”d get the last picture eight times. But that didn”t happen…it worked, ie, using a single Downloader was more than enough to get all the images…So, it seemed like this sample was a little “bloated” after all…

Anti-spam software for Exchange Server Free Disclaimer

Anti-spam software for Exchange Server

DDOS attacks against Estonian Government websites

I originally spotted this article thanks to Harry Waldron’s blog, and what I read there saddens me.


Many of us have known for a while that the primary reason the bad guys infect our computers has changed from “I’ve got the biggest schwang because I infected the most PCs” script kiddy bragging to financially and criminally motivated goals.  The bad guys want to 0wn our computers so that they can use our broadband connections to distribute spam, so that our computers can be used as involuntary hosts of warez and other crud, and to harness our computers to be used as zombies in attacks against various Web sites.


I know that computer owners do not realise their lovely new machines may be used to score points in a political war on distant shores, but that is the reality of the Internet world – and I hate it.  What happened to the brave visions for “the Internet” back when it was a babe? What happened to the visions of the global good – the ease of communication, the spreading knowledge, and education – empowering users, teaching them and strengthening them?


I’ve heard some analysts suggest that up to 98% of all spam is being sent via infected computers, and the bad guys don’t care if those computers are owned by business, or grandma and grandad in the local retirement home.  You can be a passifist, you can be anti-war, you can be pro-peace, you can be on the other side of the world and completely unaware of what is going on in distant countries you never think of and will never visit, but your computer may still be used in somebody else’s “war”.


I wish for the “good old days” when malware did no more than add a toolbar to IE, change your Search Engine and home page, and throw up pop-up windows advertising stuff you wouldn’t buy anyway.


Unrest in Estonia:
http://www.f-secure.com/weblog/archives/archive-042007.html#00001181


Update on the Estonian DDoS attacks:
http://www.f-secure.com/weblog/archives/archive-042007.html#00001183


 

msfeedicon version 2.3 has been released

I love this little programme, which is a free RSS plugin for IE7.  It adds an icon to your system tray and displays when you have unread posts in your subscribed RSS feeds.  It can be downloaded here:
http://www.wictorwilen.se/msfeedicon.aspx


msfeedicon offers the following features:


  • Icon in the system tray indicating status of you feed subscriptions
  • Displays notifications when a feed contains new posts (customisable)
  • Automatically marks a feed as read (customisable)
  • Force an update on all feeds
  • Star a notification for later reading
  • Mark as read without viewing the feed
  • Cancel subscription from notification window
  • Searching the new posts for specific Tags so you can select which posts are interesting to you
  • Feed statistics
  • Install and uninstall program
  • Shows notifications when a new version of msfeedicon exists (customisable)
  • Enable or disable the automatic synchronization of Windows RSS platform
  • Presentation mode aware (Windows Vista only)


Personally I prefer msfeedicon to Feeds Plus (even though Feeds Plus was developed by the IE RSS team) because Feeds Plus just didn’t behave well on my system and it isn’t as feature rich as msfeedicon, but if you want to compare the products, Feeds Plus can be downloaded here:
http://www.enhanceie.com/ie/feedsplus.asp


You can find my previous comments about Feeds plus here:
http://msmvps.com/blogs/spywaresucks/archive/2007/01/26/521121.aspx

WSUS Product Team Blog : Update on svchost/msi performance issue and 3.0 Client distribution plan

Update on svchost/msi performance issue and 3.0 Client distribution plan

Recent Comments

Archives