<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Idan Felix&amp;#39;s Blog</title><link>http://blogs.microsoft.co.il/blogs/felix/</link><description>Life was very simple - And then some one thought of adding some Technical Details.</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Entity Framework Bad Practices and solutions with EF-Prof</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2011/09/06/entity-framework-bad-practices-and-solutions-with-ef-prof.aspx</link><pubDate>Tue, 06 Sep 2011 21:55:36 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:895965</guid><dc:creator>Felix</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=895965</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2011/09/06/entity-framework-bad-practices-and-solutions-with-ef-prof.aspx#comments</comments><description>&lt;h1 align="left"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank"&gt;Entity Framework&lt;/a&gt; Bad Practices – and solutions with &lt;a href="http://efprof.com/" target="_blank"&gt;EF-Prof&lt;/a&gt;&lt;/h1&gt;  &lt;p dir="ltr" align="left"&gt;This week I had to find and fix an interesting bug. For some reason, when using &lt;a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank"&gt;Entity Framework&lt;/a&gt;, we’ve seen database queries that were causing a &lt;a href="http://msdn.microsoft.com/en-us/library/system.timeoutexception.aspx" target="_blank"&gt;TimeoutException&lt;/a&gt; to be thrown. We used &lt;a href="http://efprof.com/" target="_blank"&gt;EF-Prof&lt;/a&gt; to find which query was giving us troubles, and found a few additional issues. Solving these issues has improved the performance of our server by a great deal. &lt;/p&gt;  &lt;p dir="ltr" align="left"&gt;While there are &lt;a href="http://blogs.msdn.com/b/dsimmons/archive/2010/07/23/ef-query-tuning.aspx" target="_blank"&gt;many ways&lt;/a&gt; to abuse ADO.Net Entity Framework, these were the two issues I’ve stumbled upon this week:&lt;/p&gt;  &lt;h3 align="left"&gt;Setting the environment&lt;/h3&gt;  &lt;p dir="ltr" align="left"&gt;In order to demonstrate the issues, I’m using an ultra-simple Entity Framework Model:&lt;/p&gt;  &lt;p dir="ltr" align="left"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/felix/01-SimpleModel_4C4E3DDD.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="01-SimpleModel" border="0" alt="01-SimpleModel" src="http://blogs.microsoft.co.il/blogs/felix/01-SimpleModel_thumb_111A6212.jpg" width="371" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p dir="ltr" align="left"&gt;The model is created in a Console Application.&lt;/p&gt;  &lt;h3 align="left"&gt;Badly Interpreted Queries&lt;/h3&gt;  &lt;p dir="ltr" align="left"&gt;The first issue we looked for was the TimeoutException. Consider the following code:&lt;/p&gt;   &lt;div dir="ltr" align="left"&gt;   &lt;div style="color:black;overflow:auto;"&gt;     &lt;pre style="margin:0em;"&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt;  (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt;  context = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt;  &lt;span style="color:#2b91af;"&gt;PubsEntities&lt;/span&gt;&lt;span style="color:#000000;"&gt;())&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt;  latestIds = &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt;&lt;span style="color:#000000;"&gt;  pubs &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt;  context.Pubs&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;                      &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;&lt;span style="color:#000000;"&gt;  pubs.City != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="color:#000000;"&gt;  &lt;font style="background-color:#ffff00;"&gt;&amp;amp;&amp;amp; pubs != &lt;/font&gt;&lt;span style="color:#0000ff;"&gt;&lt;font style="background-color:#ffff00;"&gt;null&lt;/font&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;                     &lt;span style="color:#0000ff;"&gt;group&lt;/span&gt;&lt;span style="color:#000000;"&gt;  pubs &lt;span style="color:#0000ff;"&gt;by&lt;/span&gt;&lt;span style="color:#000000;"&gt;  pubs.City&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;                         &lt;span style="color:#0000ff;"&gt;into&lt;/span&gt;&lt;span style="color:#000000;"&gt;  cities&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;                         &lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;&lt;span style="color:#000000;"&gt;  cities.Max(pub =&amp;gt; pub.Id);&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt; &lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt;  latest = &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt;&lt;span style="color:#000000;"&gt;  pub &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt;  context.Pubs&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;                   &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt;&lt;span style="color:#000000;"&gt;  latestIds.Contains(pub.Id)&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;                   &lt;span style="color:#0000ff;"&gt;select&lt;/span&gt;&lt;span style="color:#000000;"&gt;  pub;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt; &lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;     &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt;  (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt;  pub &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt;  latest)&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;     &lt;span style="color:#000000;"&gt;{&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;         &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;&lt;span style="color:#000000;"&gt; .WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;&lt;span style="color:#3cb371;"&gt;&lt;span style="color:#000000;"&gt;{&lt;/span&gt;0&lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;span style="color:#a31515;"&gt;:&lt;span style="color:#3cb371;"&gt;&lt;span style="color:#000000;"&gt;{&lt;/span&gt;1&lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; , pub.CityId, pub.Name);&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;     &lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p dir="ltr" align="left"&gt;&lt;strong&gt;Breakdown:&lt;/strong&gt; This code finds the pub that has the largest Id in each city. Since the model uses auto incrementing identity, it’s safe to say that it finds the most recent pub added in each city. It does that by picking up the max Id of pubs in a city, and then gets all pubs, according to the latestIds.&lt;/p&gt;

&lt;p dir="ltr" align="left"&gt;The trivial problem is easy to see (&lt;em&gt;because I painted it yellow &lt;img style="border-bottom-style:none;border-right-style:none;border-top-style:none;border-left-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.microsoft.co.il/blogs/felix/wlEmoticon-smile_2F187006.png" /&gt;&lt;/em&gt;) - There’s a redundant check there, to verify that a row coming from the context is not null, which can’t really happen. The interesting thing is to check what’s going on in the generated SQL code:&lt;/p&gt;

&lt;div dir="ltr" align="left"&gt;
  &lt;div style="color:black;overflow:auto;"&gt;
    &lt;pre&gt;&lt;span&gt;
SELECT [Id] AS [Id], [Name] AS [Name], [Owner] AS [Owner], 
       [NumberOfSeats] AS [NumberOfSeats], [Street] AS [Street], 
       [HouseNumber] AS [HouseNumber], [City] AS [City] 
FROM [Pub] 
WHERE EXISTS (
       SELECT 1 AS [C1] 
       FROM (  
              SELECT E3.[Id] AS [K1], E3.[Name] AS [K2], 
                     E3.[OtherUnusefulInformation] AS [K3], 
                     MAX([E2].[Id]) AS [A1] 
              FROM   [Pub] AS [E2] 
              LEFT OUTER JOIN [City] AS E3 
              ON     [E2].[City] = E3.[Id] 
              WHERE  ([E2].[City] IS NOT NULL) 
              AND    &lt;font style="background-color:#ffff00;"&gt;(cast(1 as bit) &amp;lt;&amp;gt; cast(0 as bit))&lt;/font&gt;
              GROUP BY E3.[Id], E3.[Name], E3.[OtherUnusefulInformation]) AS [GroupBy1] 
       WHERE [GroupBy1].[A1] = E1.[Id])&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;See the weird condition? It is evaluated for each record, because it can’t be cached by SQL-Server. That little piece of code slowed the query on a large enough dataset, and caused a timeout. &lt;strong&gt;By removing the nullity check, we reduced the query runtime from 30 sec to 34ms&lt;/strong&gt;.&lt;/p&gt;

  &lt;p&gt;How did we find it? Whenever an error is thrown, the EF-Profiler shows an &lt;a href="http://efprof.com/Learn/Alerts/ErrorDetected" target="_blank"&gt;alert&lt;/a&gt;. Rest of the time, it was our &lt;a href="http://ayende.com/blog/4554/nhprof-new-feature-expensive-queries-report" target="_blank"&gt;most expensive query&lt;/a&gt;, according to the EF-Profiler.&lt;/p&gt;

  &lt;h3&gt;Select &lt;a href="http://efprof.com/Learn/Alerts/SelectNPlusOne" target="_blank"&gt;N+1&lt;/a&gt;&lt;/h3&gt;

  &lt;p&gt;Once the profiler was hooked and the timeout was gone, we went on and randomly clicked buttons on our application. We’ve found that a few of the methods had code that resembled the following:&lt;/p&gt;


  &lt;div style="width:99.5%;color:black;overflow:auto;"&gt;
    &lt;pre style="margin:0em;"&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt;  (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt; context = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;span style="color:#2b91af;"&gt;PubsEntities&lt;/span&gt;&lt;span style="color:#000000;"&gt;())&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt; &lt;span style="color:#000000;"&gt;{&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt; cities = context.Cities;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;     &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt;  city &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt;  cities)&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;     &lt;span style="color:#000000;"&gt;{&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;         &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;&lt;span style="color:#000000;"&gt;.WriteLine(city.Name);&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;         &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt;  pub &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt;  city.Pubs)&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;         &lt;span style="color:#000000;"&gt;{&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;             &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;&lt;span style="color:#000000;"&gt;.WriteLine(“&lt;span style="color:#a31515;"&gt;&lt;a&gt;\t&lt;span style="color:#3cb371;"&gt;&lt;span style="color:#000000;"&gt;{&lt;/span&gt;0&lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;span style="color:#a31515;"&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;”, pub.Name);&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;         &lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt;     &lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin:0em;"&gt; &lt;span style="color:#000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;


  &lt;p&gt;Now, in an object oriented world, this code makes perfect sense – However, when using EF, this causes a lot of different SELECT statements – once for each pub being used. This is caused because the Pubs are Lazy-loaded. This issue is called “&lt;a href="http://efprof.com/Learn/Alerts/SelectNPlusOne" target="_blank"&gt;The Select N+1 data access anti-pattern&lt;/a&gt;”.&lt;/p&gt;

  &lt;p&gt;Solution? simple indicate to EF that the Cities collection should be loaded with pubs, like this:&lt;/p&gt;


  &lt;div style="color:black;overflow:auto;"&gt;
    &lt;pre style="margin:0em;"&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#000000;"&gt; cities = context.Cities.Include(&lt;span style="color:#a31515;"&gt;&amp;quot;Pubs&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;The Include method causes the pubs collection to be eagerly loaded, thus only one call is made to the database. This reduces a lot of overhead. This issue was the most common alert given by EF-Prof. &lt;/p&gt;

  &lt;h3&gt;Conclusions&lt;/h3&gt;

  &lt;p&gt;1. When using an O/RM, such as ADO.Net’s entity framework, make sure to use a profiler to find any performance bottlenecks.&lt;/p&gt;

  &lt;p&gt;2. Don’t trust the generated queries blindly– go over the queries, and check their translation to SQL. &lt;/p&gt;

  &lt;p&gt;3. Using ADO.Net Entity Framework, or any O/RM for that matter, does not hide the database – it makes it much easier to use, but still – be aware that there’s a database under the hood, and do your best, to minimize the number of queries the database has to execute.&lt;/p&gt;

  &lt;p&gt;Happy Coding!&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=895965" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/EF-Prof/default.aspx">EF-Prof</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/O_2F00_RM/default.aspx">O/RM</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Performance+Issues/default.aspx">Performance Issues</category></item><item><title>Refactoring telerik RadScheduleView ReadOnly example to attached behavior</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2011/08/27/refactoring-telerik-radscheduleview-readonly-example-to-attached-behavior.aspx</link><pubDate>Sun, 28 Aug 2011 00:16:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:889599</guid><dc:creator>Felix</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=889599</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2011/08/27/refactoring-telerik-radscheduleview-readonly-example-to-attached-behavior.aspx#comments</comments><description>&lt;div dir="ltr" align="left"&gt;
&lt;h1&gt;Refactoring to attached behavior&lt;/h1&gt;
&lt;p&gt;At the project I’m currently working on, I had to integrate &lt;a href="http://www.telerik.com/" target="_blank"&gt;Telerik&lt;/a&gt;’s &lt;a href="http://www.telerik.com/products/wpf/scheduleview.aspx" target="_blank"&gt;RadScheduleView&lt;/a&gt; in a WPF application that uses &lt;a href="http://caliburnmicro.codeplex.com/" target="_blank"&gt;Caliburn Micro&lt;/a&gt; as MVVM framework. The RadScheduleView is a time management&amp;nbsp; component, however, we needed it only for presentation – thus we had to make it a read only control.&lt;/p&gt;
&lt;p&gt;The control itself does not expose an “IsReadOnly” property, so I found &lt;a href="http://www.telerik.com/community/forums/wpf/scheduleview/read-only-not-supported.aspx" target="_blank"&gt;this post&lt;/a&gt; at Telerik’s forums. It includes a &lt;a href="http://www.telerik.com/ClientsFiles/248757_Wpf-RadScheduleView.zip" target="_blank"&gt;code sample&lt;/a&gt; that shows how to do it, but it does not conform nicely to the &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" target="_blank"&gt;M-V-VM Pattern&lt;/a&gt; – So I had to refactor it to &lt;a href="http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx" target="_blank"&gt;Attached Behavior&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The Problem: Code in Code-Behind&lt;/h2&gt;
&lt;p&gt;The demo project places the event handling code of 4 events (AppointmentCreating, AppointmentDeleting, AppointmentEditing and ShowDialog) in the code behind the MainWindow (MainWindow.xaml.cs file). &lt;/p&gt;
&lt;p&gt;Since we’re using Caliburn, we did not want to break pattern and add code to our view’s .xaml.cs file. This way, our code behind will remain slim and clean.&lt;/p&gt;
&lt;h2&gt;The Solution: Attached Behaviors&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx" target="_blank"&gt;Attached Behaviors&lt;/a&gt; enable changing of behavior of WPF controls in a declarative manner, with no unwanted code residue in the view.&lt;/p&gt;
&lt;p&gt;The magic uses &lt;a href="http://joshsmithonwpf.wordpress.com/2007/06/22/overview-of-attached-properties-in-wpf/" target="_blank"&gt;Attached Properties&lt;/a&gt;: Since &lt;a href="http://msdn.microsoft.com/en-us/library/ms749011.aspx" target="_blank"&gt;attached properties&lt;/a&gt; are dependency properties, code can register to a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.propertychangedcallback.aspx" target="_blank"&gt;property change event&lt;/a&gt;. The event handler then modifies the control’s properties and events to have the required functionality.&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Result (&lt;i&gt;Code&lt;/i&gt;):&lt;/h3&gt;
&lt;p&gt;(Code is provided as-is.)&lt;/p&gt;
&lt;div style="OVERFLOW:auto;"&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;span&gt;using&lt;/span&gt;&lt;span&gt;  System;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;span&gt;using&lt;/span&gt;&lt;span&gt;  System.Windows;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;span&gt;using&lt;/span&gt;&lt;span&gt;  Telerik.Windows.Controls;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;span&gt;namespace&lt;/span&gt;&lt;span&gt;  Wpf_RadScheduleView&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;     &lt;span&gt;public&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;class&lt;/span&gt;&lt;span&gt;  &lt;span&gt;ReadOnlyBehavior&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;     &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;private&lt;/span&gt;&lt;span&gt;  &lt;span&gt;const&lt;/span&gt;&lt;span&gt;  &lt;span&gt;string&lt;/span&gt;&lt;span&gt;  INVALID_TYPE_ERROR_MESSAGE = &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;&amp;quot;This attached behavior can only be aplied on RadScheduleView controls.&amp;quot;&lt;/span&gt;&lt;span&gt; ;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;public&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;bool&lt;/span&gt;&lt;span&gt;  GetIsReadOnly(&lt;span&gt;DependencyObject&lt;/span&gt;&lt;span&gt;  obj)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;return&lt;/span&gt;&lt;span&gt;  (&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; )obj.GetValue(IsReadOnlyProperty);&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;public&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;void&lt;/span&gt;&lt;span&gt;  SetIsReadOnly(&lt;span&gt;DependencyObject&lt;/span&gt;&lt;span&gt;  obj, &lt;span&gt;bool&lt;/span&gt;&lt;span&gt;  value)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             obj.SetValue(IsReadOnlyProperty, value);&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;public&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;readonly&lt;/span&gt;&lt;span&gt;  &lt;span&gt;DependencyProperty&lt;/span&gt;&lt;span&gt;  IsReadOnlyProperty =&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;DependencyProperty&lt;/span&gt;&lt;span&gt; .RegisterAttached(&lt;span&gt;&amp;quot;IsReadOnly&amp;quot;&lt;/span&gt;&lt;span&gt; , &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                                                 &lt;span&gt;typeof&lt;/span&gt;&lt;span&gt; (&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; ), &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                                                 &lt;span&gt;typeof&lt;/span&gt;&lt;span&gt; (&lt;span&gt;ReadOnlyBehavior&lt;/span&gt;&lt;span&gt; ), &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                                                 &lt;span&gt;new&lt;/span&gt;&lt;span&gt;  &lt;span&gt;UIPropertyMetadata&lt;/span&gt;&lt;span&gt; (&lt;span&gt;false&lt;/span&gt;&lt;span&gt; , &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                                                                        IsReadOnlyChanged));&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;private&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;void&lt;/span&gt;&lt;span&gt;  IsReadOnlyChanged(&lt;span&gt;DependencyObject&lt;/span&gt;&lt;span&gt;  d, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                                               &lt;span&gt;DependencyPropertyChangedEventArgs&lt;/span&gt;&lt;span&gt;  e)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;if&lt;/span&gt;&lt;span&gt;  (d == &lt;span&gt;null&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                 &lt;span&gt;throw&lt;/span&gt;&lt;span&gt;  &lt;span&gt;new&lt;/span&gt;&lt;span&gt;  &lt;span&gt;ArgumentNullException&lt;/span&gt;&lt;span&gt; (&lt;span&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;span&gt; );&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;var&lt;/span&gt;&lt;span&gt;  scheduleView = d &lt;span&gt;as&lt;/span&gt;&lt;span&gt;  &lt;span&gt;RadScheduleView&lt;/span&gt;&lt;span&gt; ;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;if&lt;/span&gt;&lt;span&gt;  (scheduleView == &lt;span&gt;null&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                 &lt;span&gt;throw&lt;/span&gt;&lt;span&gt;  &lt;span&gt;new&lt;/span&gt;&lt;span&gt;  &lt;span&gt;ArgumentException&lt;/span&gt;&lt;span&gt; (INVALID_TYPE_ERROR_MESSAGE, &lt;span&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;span&gt; );&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;var&lt;/span&gt;&lt;span&gt;  shouldBeReadOnly = (&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; )e.NewValue;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;if&lt;/span&gt;&lt;span&gt;  (shouldBeReadOnly)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                 RegisterInteractionEventHandlers(scheduleView);&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                 &lt;span&gt;var&lt;/span&gt;&lt;span&gt;  shouldCleanup = (&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; )e.OldValue;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                 &lt;span&gt;if&lt;/span&gt;&lt;span&gt;  (shouldCleanup)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                 &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                     UnregisterInteractionEventHandlers(scheduleView);&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                 &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;private&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;void&lt;/span&gt;&lt;span&gt;  UnregisterInteractionEventHandlers(&lt;span&gt;RadScheduleView&lt;/span&gt;&lt;span&gt;  scheduleView)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             scheduleView.AppointmentCreating -= CancelAppointmentCreating;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             scheduleView.AppointmentDeleting -= CancelAppointmentDeleting;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             scheduleView.AppointmentEditing -= CancelAppointmentEditing;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;private&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;void&lt;/span&gt;&lt;span&gt;  RegisterInteractionEventHandlers(&lt;span&gt;RadScheduleView&lt;/span&gt;&lt;span&gt;  scheduleView)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             scheduleView.AppointmentCreating += CancelAppointmentCreating;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             scheduleView.AppointmentDeleting += CancelAppointmentDeleting;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             scheduleView.AppointmentEditing += CancelAppointmentEditing;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;private&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;void&lt;/span&gt;&lt;span&gt;  CancelAppointmentEditing(&lt;span&gt;object&lt;/span&gt;&lt;span&gt;  sender, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                                                      &lt;span&gt;AppointmentEditingEventArgs&lt;/span&gt;&lt;span&gt;  e)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             e.Cancel = &lt;span&gt;true&lt;/span&gt;&lt;span&gt; ;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;private&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;void&lt;/span&gt;&lt;span&gt;  CancelAppointmentDeleting(&lt;span&gt;object&lt;/span&gt;&lt;span&gt;  sender, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                                                       &lt;span&gt;AppointmentDeletingEventArgs&lt;/span&gt;&lt;span&gt;  e)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             e.Cancel = &lt;span&gt;true&lt;/span&gt;&lt;span&gt; ;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;private&lt;/span&gt;&lt;span&gt;  &lt;span&gt;static&lt;/span&gt;&lt;span&gt;  &lt;span&gt;void&lt;/span&gt;&lt;span&gt;  CancelAppointmentCreating(&lt;span&gt;object&lt;/span&gt;&lt;span&gt;  sender, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;                                                       &lt;span&gt;AppointmentCreatingEventArgs&lt;/span&gt;&lt;span&gt;  e)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;             e.Cancel = &lt;span&gt;true&lt;/span&gt;&lt;span&gt; ;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;     &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now, this behavior can be applied in XAML like this:&lt;/p&gt;
&lt;div style="OVERFLOW:auto;"&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;span&gt;&amp;lt;&lt;span&gt;telerik&lt;span&gt;:&lt;span&gt;RadScheduleView&lt;span&gt; x&lt;span&gt;:&lt;span&gt;Name&lt;span&gt;=&amp;quot;schedule&amp;quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt; AppointmentsSource&lt;span&gt;=&amp;quot;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Binding&lt;span&gt; Appointments&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt; ResourceTypesSource&lt;span&gt;=&amp;quot;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Binding&lt;span&gt; ResourcesTypes&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt;         &lt;span&gt; local&lt;span&gt;:&lt;span&gt;ReadOnlyBehavior.IsReadOnly&lt;span&gt;=&amp;quot;True&amp;quot; &amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;span&gt;    &lt;span&gt;&amp;lt;!-- ... --&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;pre style="MARGIN:0em;"&gt; &lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Last Step&lt;/h3&gt;
&lt;p&gt;In order for the project to compile, I have to change the ReadOnlyDragAndDropBehavior’s base class inherit from ScheduleViewDragDropBehavior and not from DefaultDragDropBehavior, as it is obsolete.&lt;/p&gt;
&lt;h3&gt;Next Possible Steps&lt;/h3&gt;
&lt;p&gt;It is also possible to turn this Attached Behavior to a &lt;a href="http://msdn.microsoft.com/en-us/library/ff726531%28v=Expression.40%29.aspx" target="_blank"&gt;System.Windows.Interactivity.Behavior&lt;/a&gt;, but we thought it would be overshooting. &lt;/p&gt;
&lt;p&gt;Another option to include the ReadOnlyDragAndDropBehavior in the attached behavior, but since I knew we’re not going to set the behavior to re-enable editing, and the assignment is still done in xaml, I did not really care about where to set it.&lt;/p&gt;
&lt;p align="left"&gt;&lt;strike&gt;&lt;b&gt;&lt;u&gt;Update:&lt;/u&gt;&lt;/b&gt; I’ve noticed that Telerik also have a &lt;/strike&gt;&lt;a href="http://www.telerik.com/products/wpf/scheduler.aspx" target="_blank"&gt;&lt;strike&gt;RadScheduler&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt; control, and that Scheduler has read only &lt;/strike&gt;&lt;a href="http://www.telerik.com/help/wpf/radscheduler-features-read-only-scheduler.html" target="_blank"&gt;&lt;strike&gt;capabilities&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt; – so if it’s possible, consider using that control instead of the RadScheduleView.&lt;/strike&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;strong&gt;&lt;u&gt;ReUpdate:&lt;/u&gt;&lt;/strong&gt; It turnes out that the &lt;span&gt;RadScheduleView&lt;span&gt; &lt;/span&gt;&lt;/span&gt;is the new control of the two.. If you need to migrate, Telerik has a &lt;a href="http://www.telerik.com/help/wpf/radscheduleview-migration-from-radscheduler.html"&gt;help post&lt;/a&gt; about it.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Enjoy, and happy coding!&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=889599" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Attached+Properties/default.aspx">Attached Properties</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Caliburn/default.aspx">Caliburn</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/RadScheduleView/default.aspx">RadScheduleView</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/ReadOnly/default.aspx">ReadOnly</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Telerik/default.aspx">Telerik</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/DEV/default.aspx">DEV</category></item><item><title>חוויה אישית – Waze – משחק יום העצמאות 2010</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2010/04/29/Playing-Waze-Game-For-April-2010.aspx</link><pubDate>Thu, 29 Apr 2010 04:45:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:602067</guid><dc:creator>Felix</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=602067</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2010/04/29/Playing-Waze-Game-For-April-2010.aspx#comments</comments><description>&lt;h1&gt;חוויה אישית – Waze – משחק יום העצמאות 2010&lt;/h1&gt;&lt;p&gt;שבת, 24/04/10, 19:30, בדרך מראש העין לרעננה. “הולכים לראות סרט?” שאלתי אותה, וחשבתי שזאת שאלה רטורית – הרי הקלטנו את “גבעת חלפון אינה עונה” ב-Max, וכבר תכננו על הפופקורן. “כן, אבל &lt;b&gt;מה זה תיבת האוצר הזאת שיש באיזור בצרה?”&lt;/b&gt; היא ענתה. בלי לדעת לאן השאלה הזו תוביל אותנו – פשוטו כמשמעו.&lt;/p&gt;  &lt;p&gt;תיבת האוצר היא חלק &lt;a href="http://www.waze.co.il/blog/2010/04/62-%D7%A9%D7%A0%D7%94-%D7%97%D7%99%D7%9B%D7%99%D7%A0%D7%95-%D7%95%D7%96%D7%94-%D7%94%D7%92%D7%99%D7%A2-%D7%9E%D7%A9%D7%97%D7%A7-%D7%94%D7%A0%D7%99%D7%95%D7%95%D7%98-%D7%94%D7%A1%D7%9C%D7%95%D7%9C/" target="_blank"&gt;מהמשחק הנהדר&lt;/a&gt; שהחבר’ה ב-&lt;a href="http://www.waze.co.il/" target="_blank"&gt;Waze&lt;/a&gt; ארגנו ליום העצמאות. החוקים פשוטים: אוספים אייקונים ע”י להגיע &lt;b&gt;פיסית&lt;/b&gt; למקום שבו מופיע האייקון על המפה, וכל הקודם זוכה. על כל אייקון שאוספים מקבלים נקודות, ומי שיש לו הכי הרבה נקודות זוכה ב-iPhone. בתיבות האוצר יכול להסתתר פרס נוסף. כבר מצאתי את עצמי עושה עיקוף קטן ביום העצמאות עצמו כדי לאסוף איזה אייקון של דגל, ואספתי איזה מיליון אייקונים בטיול שעשינו יום לפני, אז החלטנו לפרגן עיקוף דרך בצרה.&lt;/p&gt;  &lt;p&gt;19:45 “פנה ימינה”, ואנחנו עושים פרסה מתחת לכביש גהה. השמש בשלבים מתקדמים של שקיעה. חברה שלי לקחה את תפקיד הנווטת. “ישר עד הסוף. יש שם כיכר, פונים בה שמאלה”. מזמן לא הייתי בבצרה. הדלקנו סיגריות, והגברנו. שיר של אריק איינשטין ב-103. מתישהו, נגמרו פנסי הרחוב, והכביש נהיה חשוך.&lt;/p&gt;  &lt;p&gt;20:00 “אהם, עידני, כאן ימינה, לפני פסי הרכבת”. זה כביש עפר, בין שדות. נורא יפה, פסטורלי. השמש כבר שקעה. התיבה נראתה ממש מעבר לפינה, ו-Waze הכינה בשבילנו מסלול. גילינו שליד התיבה יש אייקון נוסף. בטח עוד שנייה נראה שוב אספלט, ונגיע הביתה. &lt;/p&gt;  &lt;p&gt;20:23. כביש העפר הופך להיות קשה לנהיגה. ממש חשוך. אין כלום באזור. מדליקים אורות גבוהים, ונזהרים לא ליפול לבורות. אני מחליש את הרדיו. עוד רגע, ותיבת האוצר שלי.&lt;/p&gt;  &lt;p&gt;20:45. זה לא אוטו חברה, ולא רכב שטח, אבל היא עומדת במשימה בגבורה. הכביש צר, אני לא ממש בטוח למה אני כאן ומתחיל להתקרר. לפתע, נשמע “גלינג” - ותיבת האוצר שלי. כל כך שמחתי שכמעט שקעתי עם הרכב. נס שיצאנו משם. &lt;/p&gt;  &lt;p&gt;21:10. מנסים להגיע לאייקון נוסף באזור תעשייה רעננה. נוסעים כמה שאפשר, שוב בשבילי עפר, עד לנקודה שאי אפשר לעבור עם האוטו. “טוב, אנחנו כבר כאן, בואי נצא לטייל קצת ברגל”.&lt;/p&gt;  &lt;p&gt;22:00 בסוף לא מצאנו אותו, כי הוא היה בין שדה, פרדס ולול, אבל כן יצא לי לדווח על דרך שאינה מתאימה למעבר רכב, וקיבלתי על זה 6 נקודות. לא יאמן שבכלל ניסינו להגיע אליו. משחק יום העצמאות לקח אותנו להרפתקאה מגניבה. כבר לא נראה את הסרט ותיבת האוצר שמצאנו היתה ריקה, אבל היינו במקום שאף פעם לא היינו בו, ולא הלכנו לאיבוד.&lt;/p&gt;  &lt;p&gt;כל הכבוד Waze.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=602067" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_E405D505E105D805D905DD05_+_D105E205D105E805D905EA05_/default.aspx">פוסטים בעברית</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_D805D905D505DC05_/default.aspx">טיול</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Off+Road/default.aspx">Off Road</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Waze/default.aspx">Waze</category></item><item><title>שיעורים אחרונים, מבוא למדעי המחשב</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2010/02/06/514922.aspx</link><pubDate>Sun, 07 Feb 2010 01:32:42 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:514922</guid><dc:creator>Felix</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=514922</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2010/02/06/514922.aspx#comments</comments><description>&lt;p&gt;אהלן חברים.&lt;/p&gt;  &lt;p&gt;בתקופה האחרונה עברנו שיעור על &lt;a href="http://cid-e76d2b26afc9fd1f.skydrive.live.com/self.aspx/.Public/I2CS2010-Lecture7and8-AlgorithmsAndRecursion.pdf#resId/E76D2B26AFC9FD1F!250"&gt;אלגוריתמים, סיבוכיות ורקורסיה&lt;/a&gt;, עוד שיעור על &lt;a href="http://cid-e76d2b26afc9fd1f.skydrive.live.com/self.aspx/.Public/I2CS2010-Lecture6-DataRepresentation.pdf"&gt;ייצוג מידע במחשב&lt;/a&gt;, &lt;a href="http://cid-e76d2b26afc9fd1f.skydrive.live.com/self.aspx/.Public/I2CS2010-Lecture7and8-AlgorithmsAndRecursion.pdf#resId/E76D2B26AFC9FD1F!251"&gt;ושיעור חזרה לפני הבחינה&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;ניתן להוריד את כל המצגות מהלינקים.&lt;/p&gt;  &lt;p&gt;בהצלחה בבחינה!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=514922" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_DE05D105D505D005_+_DC05DE05D305E205D905_+_D405DE05D705E905D105_/default.aspx">מבוא למדעי המחשב</category></item><item><title>שיעור חמישי, מבוא למדעי המחשב</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2009/11/17/446428.aspx</link><pubDate>Tue, 17 Nov 2009 05:41:17 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:446428</guid><dc:creator>Felix</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=446428</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2009/11/17/446428.aspx#comments</comments><description>&lt;p&gt;השיעור הבא הוא שיעור הכנה למבחן אמצע – לכן, אנא תשלחו אליי שאלות ודברים שאינם ברורים מהחומר, כדי שנוכל לעשות יחד חזרה. &lt;/p&gt;  &lt;p&gt;את המצגת מהיום ניתן &lt;a href="http://cid-e76d2b26afc9fd1f.skydrive.live.com/self.aspx/.Public/I2CS2010-Lecture5-Slides.pdf"&gt;להוריד מכאן&lt;/a&gt;, ובגירסה שנוח לכתוב עליה ניתן &lt;a href="http://cid-e76d2b26afc9fd1f.skydrive.live.com/self.aspx/.Public/I2CS2010-Lecture5-Handout.pdf"&gt;להוריד מכאן&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;תהנו, ובהצלחה בתרגיל 5!&lt;/p&gt;  &lt;p&gt;פליקס.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=446428" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_DE05E605D205EA05_/default.aspx">מצגת</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_DE05D105D505D005_+_DC05DE05D305E205D905_+_D405DE05D705E905D105_/default.aspx">מבוא למדעי המחשב</category></item><item><title>שיעור שני, מבוא למדעי המחשב</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2009/10/26/430622.aspx</link><pubDate>Tue, 27 Oct 2009 03:40:49 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:430622</guid><dc:creator>Felix</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=430622</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2009/10/26/430622.aspx#comments</comments><description>&lt;p&gt;אהלן שוב.&lt;/p&gt;  &lt;p&gt;את המצגת (המתוקנת) אפשר להוריד &lt;a href="http://cid-e76d2b26afc9fd1f.skydrive.live.com/self.aspx/.Public/I2CS2010-Lecture2-Slides.pdf"&gt;כאן&lt;/a&gt;, ואם רוצים אותה בדפים אז &lt;a href="http://cid-e76d2b26afc9fd1f.skydrive.live.com/self.aspx/.Public/I2CS2010-Lecture2-Handout.pdf"&gt;כאן&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;תהנו,   &lt;br /&gt;&lt;em&gt;פליקס&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=430622" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_DE05E605D205EA05_/default.aspx">מצגת</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_DE05D105D505D005_+_DC05DE05D305E205D905_+_D405DE05D705E905D105_/default.aspx">מבוא למדעי המחשב</category></item><item><title>שיעור ראשון, מבוא למדעי המחשב</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2009/10/19/428560.aspx</link><pubDate>Tue, 20 Oct 2009 04:13:37 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:428560</guid><dc:creator>Felix</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=428560</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2009/10/19/428560.aspx#comments</comments><description>&lt;p&gt;לכל משתתפי השיעור, היה אחלה שיעור. נתראה בשני הבא.&lt;/p&gt;  &lt;p&gt;את המצגת ניתן להוריד מ&lt;a href="http://cid-e76d2b26afc9fd1f.skydrive.live.com/self.aspx/.Public/I2CS2010-Lecture1-Slides.pdf"&gt;כאן&lt;/a&gt;, ובגירסא הנוחה להדפסה אפשר להוריד אותה &lt;a href="http://cid-e76d2b26afc9fd1f.skydrive.live.com/self.aspx/.Public/I2CS2010-Lecture1-Handout.pdf"&gt;כאן&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;תהנו!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=428560" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_DE05E605D205EA05_/default.aspx">מצגת</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_DE05D105D505D005_+_DC05DE05D305E205D905_+_D405DE05D705E905D105_/default.aspx">מבוא למדעי המחשב</category></item><item><title>מדהים: Sketch2Photo</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2009/10/13/Sketch2PhotoAmazingTimesThree.aspx</link><pubDate>Wed, 14 Oct 2009 00:24:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:424552</guid><dc:creator>Felix</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=424552</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2009/10/13/Sketch2PhotoAmazingTimesThree.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/felix/Sketch2Photo_Crop_6D404853.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;MARGIN:0px 10px 10px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" title="Sketch2Photo_Crop" border="0" alt="Sketch2Photo_Crop" align="right" src="http://blogs.microsoft.co.il/blogs/felix/Sketch2Photo_Crop_thumb_5253D6AD.jpg" width="159" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;מדהים: Sketch2Photo&lt;/h1&gt;
&lt;p&gt;זה פשוט העיף אותי, וחשבתי לחלוק את זה עם העולם. סקץ’2פוטו (Sketch2photo) היא פיתוח של מספר מדעני מחשב, וביניהם &lt;a href="http://www.faculty.idc.ac.il/arik/site/index.asp"&gt;ד”ר אריק שמיר&lt;/a&gt;, שהיה אחד המורים שלי.&lt;/p&gt;
&lt;p&gt;יחד עם &lt;a href="http://www.ece.nus.edu.sg/stfpage/eletp/Papers/sigasia09_photosketch.pdf"&gt;המאמר&lt;/a&gt;, התפרסם גם הסרטון הזה:&lt;/p&gt;
&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6496886&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;
&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=6496886&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;לדעתי, זה מדהים.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=424552" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_EA05DE05D505E005D505EA05_/default.aspx">תמונות</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_E605D905DC05D505DD05_/default.aspx">צילום</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Pictures/default.aspx">Pictures</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/TECH/default.aspx">TECH</category></item><item><title>עוד רגע קטן של אושר</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2008/10/29/YetAnotherHappyMoment.aspx</link><pubDate>Wed, 29 Oct 2008 12:21:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:159696</guid><dc:creator>Felix</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=159696</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2008/10/29/YetAnotherHappyMoment.aspx#comments</comments><description>&lt;div dir="rtl" align="right"&gt;
&lt;p&gt;לפעמים, כיף לראות שגם בעולם האמיתי הדברים עובדים כמו בבועה של הבלוג שלך. באחד ממפגשי הבלוגרים דיברנו על זכויות יוצרים, ו- &lt;a href="http://en.wikipedia.org/wiki/Creative_Commons" target="_blank"&gt;&lt;font color="#006ff7"&gt;Creative Commons&lt;/font&gt;&lt;/a&gt;. מאז, אני מעלה את התמונות שלי לפליקר כ- &lt;a href="http://creativecommons.org/" target="_blank"&gt;&lt;font color="#006ff7"&gt;Creative Commons&lt;/font&gt;&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;ואכן, &lt;a href="http://www.flickr.com/photos/felixidan/2162733310/" target="_blank"&gt;&lt;font color="#006ff7"&gt;תמונה&lt;/font&gt;&lt;/a&gt;&amp;nbsp;שצילמתי מופיעה &lt;a href="http://retirementclub.wordpress.com/2008/05/22/calculate-your-way-to-retirement/" target="_blank"&gt;&lt;font color="#006ff7"&gt;בבלוג&lt;/font&gt;&lt;/a&gt; של מישהו אחר בעולם. הם ביקשו רשות, ונענו בשמחה. &lt;/p&gt;
&lt;p&gt;איזה כיף זה!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=159696" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_E605D905DC05D505DD05_/default.aspx">צילום</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category></item><item><title>Touched and Burned by SilverLight</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2008/10/29/touched-and-burned-by-silverlight.aspx</link><pubDate>Wed, 29 Oct 2008 12:06:15 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:159686</guid><dc:creator>Felix</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=159686</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2008/10/29/touched-and-burned-by-silverlight.aspx#comments</comments><description>&lt;div dir="ltr" align="left"&gt; &lt;p&gt;Imagine, for a second, that you get a .abc file from a friend of yours, and try to open it - just to find out that your new shiny version of ABCReader* can&amp;#39;t open .abc files, because it is expecting .abcx files. &lt;br /&gt;You&amp;#39;d be mad, right? You would at least expect to see a warning message, while installing the new version of ABCReader, that warns you about Backward Compatibility issues.&lt;/p&gt; &lt;p&gt;However, ABCReader could be&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Backward_compatibility" target="_blank"&gt;Backward Compatible&lt;/a&gt;, so we could have liked it. We really started to enjoy using it, and would have probably continue to use it forever. &lt;br /&gt;Should I start a new startup, ABCReader would be the first thing that I would install.&lt;/p&gt; &lt;p&gt;---&lt;/p&gt; &lt;p&gt;&lt;a title="Silverlight Is Not Backward Compatible. by Felix Idan, on Flickr" href="http://www.flickr.com/photos/felixidan/2984119348/"&gt;&lt;img height="136" alt="Silverlight Is Not Backward Compatible." src="http://farm4.static.flickr.com/3189/2984119348_01305c513e.jpg" width="500" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Note: For this post, I&amp;#39;ve made up a name for a software, called &amp;quot;&lt;a href="http://www.google.com/search?q=ABCReader" target="_blank"&gt;ABCReader&lt;/a&gt;&amp;quot;. If you know such a program, please let me know, so I could pick any other random 3 letters of the alphabet.&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=159686" width="1" height="1"&gt;</description></item><item><title>עד עכשיו לא התרגשתי</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2008/02/24/61140.aspx</link><pubDate>Sun, 24 Feb 2008 19:13:27 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:61140</guid><dc:creator>Felix</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=61140</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2008/02/24/61140.aspx#comments</comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p&gt;מחר אחותי מתחתנת. זה אירוע מרגש ממש, עם המון הכנות (כמעט שכנעו אותי לעשות פן!), תיאומים (בין הצבעים של המפה לאיפור של המארחת), אוכל ויין (גרר..) - כך שאתם יכולים להבין למה הראש שלי בכלל לא נמצא ב&lt;a href="http://blogs.microsoft.co.il/blogs/bursteg/archive/2008/02/22/60750.aspx" target="_blank"&gt;מפגש הבלוגרים השלישי&lt;/a&gt; שאוטוטו עומד לקרות.&lt;/p&gt; &lt;p&gt;האאוטלוק הזכיר לי היום בבוקר את המפגש, ואת המשפט האלמותי של אחותי: &amp;quot;&lt;em&gt;אתה יודע לתכנת... תעשה מצגת Power Point...&lt;/em&gt;&amp;quot; (זה לא ציטוט ישיר, ואני בכיף אעשה מצגת, אבל זה רק בגלל &lt;strong&gt;שלא היה לי כוח&lt;/strong&gt; למצוא קוד של איזה Slideshow ב- WPF ולהתאים אותו כך שירוץ בלופ על קובץ XML לפי הסדר - אני תקוע מדיי באיזו אפליקציה טפשית ב- Facebook), ואני עסוק נורא בלהתרגש לקראת החתונה מחר.&lt;/p&gt; &lt;p&gt;עד &lt;u&gt;שיחת הטלפון המפתיעה&lt;/u&gt;:&lt;/p&gt; &lt;p&gt;&amp;quot;תשמע, אתה בא היום למפגש, נכון?&amp;quot; &lt;br /&gt;&amp;quot;ברור!&amp;quot;&lt;br /&gt;&amp;quot;אחלה. &lt;a href="http://blogs.microsoft.co.il/blogs/bursteg/" target="_blank"&gt;אני&lt;/a&gt; ו&lt;a href="http://blogs.microsoft.co.il/blogs/yosit/" target="_blank"&gt;יוסי&lt;/a&gt; שכחנו להביא &lt;a href="http://blogs.microsoft.co.il/blogs/felix/archive/2007/10/11/Stop-Shooting-Auto-Digital-Photography.aspx" target="_blank"&gt;מצלמה&lt;/a&gt;...&amp;quot;&lt;/p&gt; &lt;h3&gt;עכשיו אני מתרגש.&lt;/h3&gt; &lt;p&gt;(עכשיו, ה- Workflow למי שמתעניין בצילום: &lt;br /&gt;מדליקים את הדוד, שמים את הבטרייה שלה בהטענה, ופותחים את החבילה של הבטריות לפלאש. עוברים על התמונות של ה-&lt;a href="http://www.flickr.com/photos/felixidan/2248858606/" target="_blank"&gt;Security Usergroup&lt;/a&gt; כדי להיזכר שהאורות שם &lt;a href="http://www.flickr.com/photos/felixidan/2248065765" target="_blank"&gt;מעורבבים,&lt;/a&gt; אז לעבור לאיזון לובן כמו בן-אדם, ו&lt;a href="http://www.flickr.com/photos/felixidan/2248065765" target="_blank"&gt;שזה&lt;/a&gt; יקרה פחות. חוגרים את החצובה בתיק וחוזרים ל- Powerpoint)&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=61140" width="1" height="1"&gt;</description></item><item><title>תגובה לפוסט "טיפול כולל ב- Unhandled Exception"</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2008/01/15/quot-unhandled-exception-quot.aspx</link><pubDate>Tue, 15 Jan 2008 19:14:01 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:50387</guid><dc:creator>Felix</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=50387</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2008/01/15/quot-unhandled-exception-quot.aspx#comments</comments><description>&lt;div dir="rtl" align="right"&gt; &lt;p&gt;זוהי תגובה ל&lt;a href="http://blogs.microsoft.co.il/blogs/mikilior/archive/2008/01/10/unhanded-exception-quot-quot.aspx" target="_blank"&gt;פוסט של מיקי&lt;/a&gt; בנושא טיפול בחריגים (Exceptions) שאותם לא הצלחנו לתפוס. &lt;/p&gt; &lt;p&gt;דבר ראשון, &lt;strong&gt;&lt;u&gt;מיקי, זה אחלה פוסט&lt;/u&gt;&lt;/strong&gt;. אם היית כותב אותו שבועיים קודם, היית חוסך לי כמה שעות טובות. באמת. אבל נשארתי עם כמה שאלות, ועם תובנה אחת מה- Production שלנו. &lt;/p&gt; &lt;h4&gt;השאלות&lt;/h4&gt; &lt;p&gt;במה הטיפול בשגיאה של UI שונה מהטיפול בשגיאה של Non-UI, חוצמזה שה- NonUI גורם ליציאה מהתוכנה? ולמה צריך לטפל &lt;strong&gt;בשלושה מקומות&lt;/strong&gt; בשביל לבצע פעולה אחת (טיפול בחריג שלא טופל)? אני אנסה להבהיר את עצמי באמצעות התנסחות מתמטית: תהי E קבוצת כל החריגים. תהי U⊆E קבוצת החריגים של ה- UI. נסמן ב- &lt;u&gt;U&lt;/u&gt;=E-U את קבוצת החריגים שאינם של ה- UI. קל לראות ש- U∪&lt;u&gt;U&lt;/u&gt;=E - ולכן - למה צריך 3 מקומות?&lt;/p&gt; &lt;h4&gt;התובנה &lt;/h4&gt; &lt;p&gt;השתמשתי בקוד של מיקי, למרות השאלות. זה הגיע מהר ל- Production, כי טיפול בחריגים לא מטופלים זה חשוב, והשתמשתי ב- Log4Net כדי לקבל מייל על החריגים שנזרקו - אבל המידע הוא מידע חלקי ולא מאוד מועיל - בלי הפרמטרים שהגיעו למתודה שזרקה את החריג, גיליתי שקשה לי מאוד לשחזר את מה שקרה, או להבין מה קרה - אז שווה להזכיר כאן את ההרצאה של אוהד ישראלי, &lt;a href="http://host.msn.co.il/microsoft/academyII/2/ready_4/main.htm" target="_blank"&gt;Mastering Infrastructure Development&lt;/a&gt; מ- &lt;a href="http://host.msn.co.il/microsoft/academyII/open.html" target="_blank"&gt;Developers Academy II&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=50387" width="1" height="1"&gt;</description></item><item><title>תמונות מאירוע המפתחים של השנה</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2007/11/27/37692.aspx</link><pubDate>Wed, 28 Nov 2007 01:21:05 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:37692</guid><dc:creator>Felix</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=37692</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2007/11/27/37692.aspx#comments</comments><description>&lt;div dir="rtl"&gt; &lt;p&gt;צילמתי המון תמונות, ולא אשקר, הרוב הועברו מהמצלמה ל- Recycle bin בערך באותה המהירות שהן צולמו. היום הוכחתי שיש לי עוד על מה להתאמן.&lt;/p&gt; &lt;p&gt;תמונות מההרצאות - עכשיו זה סיפור אחר...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a title="DevAcadamy2 050" href="http://www.flickr.com/photos/11350805@N05/2069400206/"&gt;&lt;img alt="DevAcadamy2 050" src="http://static.flickr.com/2034/2069400206_7bb81813d9.jpg" border="0" /&gt;&lt;/a&gt;&lt;a title="DevAcadamy2 041" href="http://www.flickr.com/photos/11350805@N05/2069399040/"&gt;&lt;img alt="DevAcadamy2 041" src="http://static.flickr.com/2204/2069399040_5dc57d9f34.jpg" border="0" /&gt;&lt;/a&gt;&lt;a title="DevAcadamy2 033" href="http://www.flickr.com/photos/11350805@N05/2068602945/"&gt;&lt;img alt="DevAcadamy2 033" src="http://static.flickr.com/2017/2068602945_8c027e529d.jpg" border="0" /&gt;&lt;/a&gt;&lt;a title="DevAcadamy2 058" href="http://www.flickr.com/photos/11350805@N05/2068602115/"&gt;&lt;img alt="DevAcadamy2 058" src="http://static.flickr.com/2260/2068602115_2d81424f03.jpg" border="0" /&gt;&lt;/a&gt;&lt;a title="DevAcadamy2 057" href="http://www.flickr.com/photos/11350805@N05/2069396448/"&gt;&lt;img alt="DevAcadamy2 057" src="http://static.flickr.com/2307/2069396448_6c77c68cec.jpg" border="0" /&gt;&lt;/a&gt;&lt;a title="DevAcadamy2 053" href="http://www.flickr.com/photos/11350805@N05/2069395590/"&gt;&lt;img alt="DevAcadamy2 053" src="http://static.flickr.com/2161/2069395590_d77618de97.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;עכשיו הגיע הזמן לחזור לעשות שיעורי בית...&lt;/p&gt; &lt;p&gt;תודה לכווולם. היה לי גן עדן ועוד קצת. &lt;/p&gt; &lt;p&gt;יוחאי - אולי פעמיים כי טוב ?&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=37692" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/DevAcademy2/default.aspx">DevAcademy2</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Pictures/default.aspx">Pictures</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Big+Events/default.aspx">Big Events</category></item><item><title>System.InvalidOperationException: Invoke or BeginInvoke cannot be called on a control until the window handle has been created.</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2007/10/12/system-invalidoperationexception-invoke-or-begininvoke-cannot-be-called-on-a-control-until-the-window-handle-has-been-created.aspx</link><pubDate>Fri, 12 Oct 2007 07:04:27 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:27203</guid><dc:creator>Felix</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=27203</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2007/10/12/system-invalidoperationexception-invoke-or-begininvoke-cannot-be-called-on-a-control-until-the-window-handle-has-been-created.aspx#comments</comments><description>&lt;div dir="ltr" align="left"&gt; &lt;p&gt;This is the most annoying bug I had to handle. Here&amp;#39;s the exception details:&lt;/p&gt; &lt;p&gt;Message: &amp;quot;Invoke or BeginInvoke cannot be called on a control until the window handle has been created.&amp;quot;&lt;/p&gt; &lt;p&gt;Source: &amp;quot;System.Windows.Forms&amp;quot;&lt;/p&gt; &lt;p&gt;Stack Trace:&lt;/p&gt; &lt;p&gt;at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)&lt;br /&gt;at System.Windows.Forms.Control.BeginInvoke(Delegate method, Object[] args)&lt;br /&gt;at System.Windows.Forms.ButtonBase.OnFrameChanged(Object o, EventArgs e)&lt;br /&gt;at System.Drawing.ImageAnimator.ImageInfo.OnFrameChanged(EventArgs e)&lt;br /&gt;at System.Drawing.ImageAnimator.ImageInfo.set_Frame(Int32 value)&lt;br /&gt;at System.Drawing.ImageAnimator.AnimateImages50ms()&lt;br /&gt;at System.Threading.ThreadHelper.ThreadStart_Context(Object state)&lt;br /&gt;at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)&lt;br /&gt;at System.Threading.ThreadHelper.ThreadStart() &lt;p&gt;The thing is, that the programmer who wrote the code that caused the problem knew nothing about multithreading, nor did he know how to read and understand the exception details, and the exception was thrown only after leaving all forms, and printing the &amp;quot;Program Closed Correctly&amp;quot; in the console window we use to debug, and it was thrown once in every 3 executions (more or less, depends on the computer&amp;#39;s mood). &lt;p&gt;The reason for this bug was a button with an image, an &lt;strong&gt;animated gif &lt;/strong&gt;image.  &lt;p&gt;We got rid of that image, and the bug never rose his evil head again.  &lt;p&gt;Now, can anyone tell me how to get rid of the exception, while still using the animated gif ? How can I ask, just before closing the form, to stop animations ? I have a graphic designer, and I&amp;#39;d hate to let him go just because I can&amp;#39;t deliver my goods with animated buttons... &lt;p&gt;(oh, and saying &amp;quot;Just change everything to WPF&amp;quot; is not really a good answer - we&amp;#39;re planning it, but it won&amp;#39;t happen anytime soon - not for a few months - because we have to put everything else in place first (NHibernate, the BLL itself, and quite a few other modules) - so I know WPF is the answer, but I&amp;#39;m looking into something else.) &lt;p&gt;Thanks!&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=27203" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Bugs/default.aspx">Bugs</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/Exceptions/default.aspx">Exceptions</category></item><item><title>אמרו די לאוטומטי - צילום דיגיטלי</title><link>http://blogs.microsoft.co.il/blogs/felix/archive/2007/10/11/Stop-Shooting-Auto-Digital-Photography.aspx</link><pubDate>Thu, 11 Oct 2007 09:43:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:27000</guid><dc:creator>Felix</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/felix/rsscomments.aspx?PostID=27000</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/felix/archive/2007/10/11/Stop-Shooting-Auto-Digital-Photography.aspx#comments</comments><description>&lt;div dir="rtl" align="right"&gt;
&lt;h4&gt;פתח דבר&lt;/h4&gt;
&lt;p&gt;לפני כמה שבועות מצאתי &lt;a href="http://www.microsoft.com/israel/windowsxp/using/digitalphotography/learnmore/composition.mspx" target="_blank"&gt;מאמר חמוד נורא&lt;/a&gt; על קומפוזיציה בצילום, בעברית, באתר מייקרוסופט. נכון, זה פורסם ב-1 במאי, 2002, אבל זה עשה לי ממש חשק - אז קניתי מצלמה דיגיטלית חדשה, &lt;a href="http://www.dpreview.com/reviews/canoneos350d/" target="_blank"&gt;Canon EOS 350D&lt;/a&gt;, או כמו שהחברה שלי קוראת לה, &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Digital_single-lens_reflex_camera" target="_blank"&gt;מצלמה עם אף&lt;/a&gt;&amp;quot;, והתחלתי להתנסות.&lt;/p&gt;
&lt;p&gt;מסתבר, &lt;a class="" href="http://blogs.microsoft.co.il/blogs/yosit"&gt;שלעוד אחד מהקהילה&lt;/a&gt; יש&amp;nbsp;מצלמה כזו! ניגשתי &lt;a class="" href="http://blogs.microsoft.co.il/blogs/yosit" target="_blank"&gt;אליו&lt;/a&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/liorz/archive/2007/10/08/26674.aspx" target="_blank"&gt;במפגש הבלוגרים השני&lt;/a&gt;, כחובב צילום מתחיל, וביקשתי לעצתו. הוא ענה לי &amp;quot;לעולם, אבל לעולם, אל תשתמש במצבי הצילום שהם באות ולא בציור&amp;quot; (קרי, P, Tv, Av ו- M). החלטתי לעשות מעשה, ולנסות להסביר &lt;u&gt;&lt;strong&gt;למה כן&lt;/strong&gt;&lt;/u&gt; להשתמש במצבים האלה. הפוסט הזה מוקדש באהבה רבה לאותו איש. אני לא אעבור על המצב P, כי הוא כמעט אוטומטי, ומאפשר שליטה נורמאלית רק על רגישות החיישן וגם לא על המצב M, שבו הכל ניתן לשליטה, כי אז הרבה יותר קל לפקשש ולגרום לתת-חשיפה, או לחשיפת-יתר.&amp;nbsp;(אם זה נשמע כמו סינית, תקראו את הפוסט עד הסוף, ותחזרו לקרוא את המשפט הזה).&lt;/p&gt;
&lt;p&gt;במפגש הבלוגרים דיברנו, בין השאר, על זכויות יוצרים - אז כדי להיות On the safe side, הצילומים היחידים שתראו בפוסט הזה צולמו ע&amp;quot;י עבדכם הנאמן, והועלו ל&lt;a href="http://www.flickr.com/photos/felixidan" target="_blank"&gt;פליקר&lt;/a&gt;, ופורסמו כ- Common Creatives.&lt;/p&gt;
&lt;p&gt;הערה אחרונה: הפוסט הזה נכתב בטרמינולוגיה של חברת Canon מבחינת המצבים על הגלגל, אז אם אין לכם Canon, פנו לייעוץ קל במדריך למשתמש של המצלמה שלכם. רוב המונחים יהיו אותו דבר. והטכניקה - גם היא לא תהיה שונה מדיי. &lt;/p&gt;
&lt;h4&gt;בשביל מה ובשביל מי זה טוב&lt;/h4&gt;
&lt;p&gt;כמעט לכולנו יש מצלמה דיגיטלית, ובד&amp;quot;כ יש לה גלגל כזה למעלה, שמאפשר לבחור את מצב הצילום. כאשר משאירים את המצב האוטומטי, נותנים למצלמה לנהל את הכל, את כל הפרמטרים הקטנים של הצילום, ומקבלים תוצאה טובה בדרך כלל. קשה להוציא תמונות עוצרות נשימה מהמצלמה בלי להכיר קצת טכניקה, ולכן, אם אתם משתמשים במצלמה דיגיטלית, תוכלו להרוויח משימוש במצבים הלא אוטומטיים של המצלמה&amp;nbsp;(אחרי לא מעט אימון, אני מודה) תמונות מדהימות.&lt;/p&gt;
&lt;h4&gt;נתחיל: מה הולך שם בפנים&lt;/h4&gt;
&lt;p&gt;אחד ממדריכי הצילום שקראתי מדמה את פעולת הצילום לפעולת מילוי כוס מים, וברשותכם, אשתמש באנלוגיה הזו. כאשר ממלאים כוס מים, אפשר לשים את הכוס תחת הברז להרבה זמן או לקצת זמן, אפשר לפתוח את הברז על חזק או על חלש ואפשר למלא כוס גדולה או כוס קטנה. &lt;/p&gt;
&lt;p&gt;בדיוק אותו דבר קורה במצלמה. הזמן שבו אנחנו &amp;quot;שמים את הכוס מתחת לברז&amp;quot; נקרא &lt;strong&gt;מהירות התריס&lt;/strong&gt; (Shutter Speed). הברז ממלא את תפקיד הצמצם (Iris), כך שככל שהברז (הצמצם) סגור יותר, פחות אור נכנס אל המצלמה (ליחידת זמן נתונה). גודל כוס המים&amp;nbsp;משול ל&lt;strong&gt;רגישות החיישן&lt;/strong&gt; (קרי, ה- ISO שמצלמים בו). אם בסיום התהליך, בכוס אין מספיק מים, התמונה תסבול מתת חשיפה (ותצא חשוכה) או חלילה מחשיפת-יתר (ותצא בהירה, או שהמצולמים שלכם יצאו בהירים).&lt;/p&gt;
&lt;p&gt;כאשר אנחנו מצלמים, מתבצעות הפעולות הבאות: קודם כל, הצמצם קטן למידה הרצויה. אז, המצלמה מודדת את כמות האור שנכנס, ומחשבת את החישובים שלה. התריס נפתח (לפי הזמן הרצוי, שהתקבל מהחישובים או מהצלם), וכמעט מייד אח&amp;quot;כ הוא נסגר. בזמן שהוא היה פתוח, החיישן של המצלמה (מה שפעם היה סרט הצילום) קלט את האור, ורשם אותו. כך התקבלה התמונה שצילמנו. במצב האוטומטי, המצלמה בוחרת לבד את &lt;strong&gt;מפתח הצמצם&lt;/strong&gt; (מה שנקרא, Aperture), ואת מהירות התריס, וגם את רגישות החיישן. במצבים האחרים, &lt;strong&gt;הצלם &lt;/strong&gt;בוחר את רגישות החיישן, ולפעמים גם את מהירות התריס, ו/או את מפתח הצמצם - תלוי במצב הצילום.&lt;/p&gt;
&lt;p&gt;האמתי, מים הם נוזל פשוט, אולי יותר מדי פשוט. זאת נסו עכשיו לחשוב על מזיגה של בירה: מזיגה מהירה מדיי תגרום ליותר מדי קצף - ובצורה דומה, לפרמטרים של הצילום יש השפעה רבה על הצילום עצמו. &lt;/p&gt;
&lt;h4&gt;שליטה על מהירות התריס - מצב הצילום Tv&lt;/h4&gt;
&lt;p&gt;במצב הצילום Tv, המצלמה מאפשרת לנו לבחור את מהירות התריס, ובד&amp;quot;כ גם את רגישות החיישן. כשנלחץ על כפתור הצילום, המצלמה תבחר לבד את מפתח הצמצם הדרוש לה, בהתאם לרגישות החיישן ומהירות התריס שבחרנו, כדי להגיע לחשיפה מוצלחת. מהירות התריס נמדדת ביחידות זמן (לדוגמא: שנייה, עשירית השנייה, &amp;quot;אחד-חלקי-25-השניה&amp;quot;, ועוד ועוד). &lt;/p&gt;
&lt;p&gt;באנגלית, המצב Tv נקרא Time Value, כי הוא מאפשר לקבוע לכמה זמן התריס ייפתח. שם נוסף למצב זה, הוא Shutter Priority.&lt;/p&gt;
&lt;h5&gt;על מה משפיעה מהירות התריס, מלבד החשיפה ? &lt;/h5&gt;
&lt;p&gt;ככל שמהירות התריס תהיה גבוהה יותר, כך &amp;quot;התנועה&amp;quot; בצילום תהיה קצרה יותר. צלמי ספורט, לדוגמא, בד&amp;quot;כ משתמשים במצב Tv כדי לצלם במשחקים, כי &amp;quot;המשחק לא עוצר&amp;quot; - השחקנים לא מפסיקים לזוז, אז כדי &amp;#39;להקפיא&amp;#39; אותם בתמונה, משתמשים במהירות תריס גבוהה (קרי זמן חשיפה קצר). דוגמא להקפאה, שאינה מעולם הספורט&amp;nbsp;: &lt;/p&gt;
&lt;p&gt;&lt;a title="Doggy (2)" href="http://www.flickr.com/photos/11350805@N05/1388395941/"&gt;&lt;img alt="Doggy (2)" src="http://static.flickr.com/1356/1388395941_9fe2cbfee2.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;שימו לב לטיפות המים - ברור לכולם שהם לא נשארו באוויר להרבה זמן. גם הכלב ניער את הראש יחסית מהר, וגם כשכש בזנב. התמונה צולמה בזמן חשיפה של 1/1250 ש&amp;#39; &amp;nbsp;(0.0008 ש&amp;#39;), מה שגרם לטיפות, אפילו לטיפות הקטנות ביותר, להיראות בבירור (סתם לידע כללי:&amp;nbsp;על המצלמה, מופיע רק המספר 1250, כי ככה זה עם מצלמות - וסומכים עליכם שתבינו שזה 1/1250).&lt;/p&gt;
&lt;p&gt;חשיפה ארוכה מאפשרת להציג תנועה דווקא בצורה מרוחה. הנה דוגמא, מרחוב קינג ג&amp;#39;ורג&amp;#39; בתל-אביב:&lt;/p&gt;
&lt;p&gt;&lt;a title="Motorcycle" href="http://www.flickr.com/photos/11350805@N05/1534862084/"&gt;&lt;img alt="Motorcycle" src="http://static.flickr.com/2033/1534862084_1d6c0a8f76.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;כאן השתמשתי בחשיפה של 0.2 שניות (זה מוצג על המצלמה כ- 2&amp;quot;0) וניסיתי (בהצלחה חלקית, יש לומר) לשמור את האופנוע באותו המקום בתמונה. התוצאה ברורה - מריחה של הרקע, הרבה יותר ממה שהאופנוען מרוח (&lt;em&gt;ואם הייתי מוצלח, הוא לא היה מרוח בכלל&lt;/em&gt;). כמובן, שככל שהחשיפה תהיה ארוכה יותר, נקבל יותר טשטוש - טשטוש זה נקרא (במפתיע) Motion Blur, והוא שונה מאוד מטשטוש שנגרם כתוצאה&amp;nbsp;מהפוקוס של הצילום. &lt;/p&gt;
&lt;h4&gt;שליטה על מפתח הצמצם - מצב הצילום Av&lt;/h4&gt;
&lt;p&gt;במצב הצילום Av, המצלמה מאפשרת לנו לבחור את מפתח הצמצם, ובד&amp;quot;כ את רגישות החיישן גם. בעת לחיצה על כפתור הצילום, המצלמה תבחר לבד את מהירות התריס הדרושה לה, בהתאם לרגישות החיישן ומפתח הצמצם שבחרנו, כדי להגיע לחשיפה טובה. מפתח הצמצם נמדדת ביחידות משונות שנקראות F-Stops, והן עובדות &amp;quot;הפוך&amp;quot; - מספר גדול יותר מייצג צמצם סגור יותר, ולהיפך&amp;nbsp;(לחנונים &lt;strong&gt;&lt;u&gt;אמיתיים&lt;/u&gt;&lt;/strong&gt;: זוהי בעצם פונקציה מעריכית: הסימון&amp;nbsp;5 על המצלמה מייצג f/5, שזה יחסית פתוח, ו- 22 מייצג f/22, שזה יחסית סגור). &lt;br /&gt;מצב זה נקרא גם Aperture Value, או Aperture Priority.&lt;/p&gt;
&lt;p&gt;כבר אמרנו, שככל שהצמצם פתוח יותר, יותר אור עובר דרכו - לכן, במצב Av, ככל שנבקש מהמצלמה צמצם פתוח יותר (עבור רגישות חיישן קבועה), נקבל מהירות תריס גבוהה יותר, כי יותר אור נכנס - אבל ללא ספק, זה לא הפאנץ&amp;#39; ליין של&amp;nbsp;מצב הצילום הזה, אלא השליטה המתקבלת על &lt;strong&gt;עומק השדה &lt;/strong&gt;(Depth Of Field) כתוצאה מהשליטה על הצמצם.&lt;/p&gt;
&lt;h5&gt;מה זה שדה בכלל ?&lt;/h5&gt;
&lt;p&gt;השדה זהו החלק בתמונה שנמצא בפוקוס. כשקראתי בפעמים הראשונות את ההגדרה הזו, אמרתי לעצמי &amp;#39;מה? לא &lt;em&gt;כל&lt;/em&gt; התמונה בפוקוס?&amp;#39; ומהר מאוד הסתבר לי שלא תמיד כל התמונה בפוקוס, ושצלם טוב יודע לשמור בתמונה על חלקים שהם בפוקוס, וחלקים שהם, איך נאמר, פחות&amp;nbsp;בפוקוס. הנה דוגמא:&lt;/p&gt;
&lt;p&gt;&lt;a title="Garden Flower" href="http://www.flickr.com/photos/11350805@N05/1513275701/"&gt;&lt;img alt="Garden Flower" src="http://static.flickr.com/2298/1513275701_306a103f28.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;זאת תמונה שצולמה &lt;strong&gt;מאוד מקרוב&lt;/strong&gt; (מה שנקרא, Macro&amp;nbsp;Photography, ועל חלק מהמצלמות מסומן ע&amp;quot;י הסימן של הפרח)&amp;nbsp;בשעה עשר וחצי בבוקר, ביום בהיר עם הרבה שמש (וזאת התמונה האהובה על החברה שלי!) בגינה. הפרח שהיה הכי קרוב למצלמה נמצא לא בפוקוס, פשוט כי העדשה לא מסוגלת להתמקד על משהו שהוא כ&amp;quot;כ קרוב - אבל הרקע של התמונה גם מטושטש, וזה, בגלל שהרקע לא נמצא בשדה של התמונה - אלא &amp;quot;עמוק&amp;quot; יותר (שוב, לחנונים אמיתיים, רחוק יותר על ציר ה-Z, כאשר התמונה עצמה (~&lt;em&gt;החיישן&lt;/em&gt;) היא מישור XY). בגלל שזה היה יום כל-כך בהיר, המצלמה בחרה לקבוע את מהירות התריס ל- 1/1600 שנייה (שזה 0.000625ש&amp;#39;, שזה מהיר יחסית), ולכן, למרות שהיתה קצת רוח, בכלל אין Motion Blur.&lt;/p&gt;
&lt;p&gt;צילום של פרחים מקרוב בד&amp;quot;כ גורם ליצירה של עומק שדה רדוד, אז הנה דוגמא יותר יפה:&lt;/p&gt;
&lt;p&gt;&lt;a title="Navit in Amsterdam" href="http://www.flickr.com/photos/11350805@N05/1423486730/"&gt;&lt;img alt="Navit in Amsterdam" src="http://static.flickr.com/1424/1423486730_8d3fae430a.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(צולם באמסטרדם, בשעה 13:30 בצהריים, עם צמצם פתוח (f/3.1) ומהירות תירס ממוצעת (1/640ש&amp;#39;). היינו מייד אחרי הטיסה, וקצת הלכנו לאיבוד בדרך למעוננו שם - בגלל זה הפרצוף המייואש...)&lt;/p&gt;
&lt;p&gt;הסבר נהדר על עומק השדה, יחד עם תמונות לדוגמא, ניתן למצוא (באנגלית) &lt;a href="http://stopshootingauto.com/2007/09/26/depth-of-field-another-view/" target="_blank"&gt;כאן&lt;/a&gt;, באתר שנקרא &lt;a href="http://stopshootingauto.com/" target="_blank"&gt;Stop Shooting Auto&lt;/a&gt;. &lt;/p&gt;
&lt;h5&gt;ואם אני רוצה את הכל?&lt;/h5&gt;
&lt;p&gt;כדי להשיג תמונה עם שדה עמוק מאוד, צריך לצלם את התמונה עם צמצם קטן (כלומר, מספר גבוה יותר). צריך רק לזכור, שככל שהצמצם קטן יותר, כך המצמה תבחר זמן חשיפה ארוך יותר - ואז אתם מסתכנים בטשטוש בגלל תנועות קטנות, שזה לא נעים בכלל (במיוחד כשזה לא רצוי), ואז שווה לשקול להשתמש בחצובה (אם בא לכם להשקיע כסף) או בלהרים את רגישות החיישן (ה- Iso) למספר גבוה יותר (רגישות גבוהה יותר).&lt;/p&gt;
&lt;p&gt;בנוסף, ככל שהצמצם קטן יותר, כל מיני אורות בתמונה פתאום מקבלים צורה של כוכב. הנה דוגמא:&lt;/p&gt;
&lt;p&gt;&lt;a title="Tel Aviv at night" href="http://www.flickr.com/photos/11350805@N05/1528493378/"&gt;&lt;img alt="Tel Aviv at night" src="http://static.flickr.com/2186/1528493378_f491d7947f.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;התמונה הזו צולמה אחרי השקיעה, בשעה 17:40, מחוף יפו לכיוון תל-אביב, עם צמצם מאוד קטן (f/22), על חצובה. היה שם כל-כך מעט אור, שהמצלמה בחרה לבצע חשיפה של 20 שניות. בזכות הצמצם הקטן, לכל האורות יש צורה של כוכב, ולמרות שהבניינים הקרובים קרובים הרבה יותר מהבניינים הארוכים, הכל בפוקוס.&lt;/p&gt;
&lt;h4&gt;שיקול נוסף - רגישות החיישן&lt;/h4&gt;
&lt;p&gt;כדי להגביר את רגישות החיישן, המצלמה פשוט מעבירה לחיישן יותר חשמל. כתוצאה מכך, החיישן נהיה יותר רגיש, ולכן הוא &amp;#39;רושם&amp;#39; יותר אור. זה משפיע מאוד על האלגוריתם של המצלמה - במצב Av, חיישן יותר רגיש יגרום לתריס יותר מהיר, ובמצב Tv, יגרום לצמצם סגור יותר - אבל יש לו תופעת לוואי - הוא גורם לרעש על התמונה (Noise, או Grain -&amp;nbsp;זה בולט במיוחד כאשר מצלמים בלילה במצלמות וידאו). &lt;/p&gt;
&lt;h4&gt;מילים אחרונות&lt;/h4&gt;
&lt;p&gt;המפתח לצילום מוצלח, הוא מזל. לגביי זה, אין בכלל ספק - אבל הרבה מאוד אימון ללא ספק ישפרו לכם את המזל, והתוצאות שתניבו באמצעות המצבים הלא אוטומטיים של המצלמה יצדיקו את האימונים. הכיף הגדול בתחביב הצילום - התוצאות מאוד מתגמלות. תמונה מוצלחת שווה הרבה יותר מאלף מילים - היא מעוררת תגובה רגשית כלשהי אצל הצופה, ולדעתי, יותר קשה להגיע לזה כשמצלמים במצב אוטומטי (או חצי אוטומטי, כמו הזה עם הציור של האיש הרץ, או זה שנועד לצילומי נוף, או הציור הזה שמזכיר פרצוף לצילומי פורטרט). &lt;/p&gt;
&lt;p&gt;אם שדרתם עד כאן, &lt;br /&gt;נאחל לכם &lt;a href="http://www.youtube.com/watch?v=ungxr2VPidQ" target="_blank"&gt;וארץ ישראל יפה&lt;/a&gt;, &lt;br /&gt;וצילום נעים!&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=27000" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_EA05DE05D505E005D505EA05_/default.aspx">תמונות</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_E605D905DC05D505DD05_/default.aspx">צילום</category><category domain="http://blogs.microsoft.co.il/blogs/felix/archive/tags/_DE05D305E805D905DA05_/default.aspx">מדריך</category></item></channel></rss>