IMovieHD 5: Type Degradation

I want to create slides for a movie and would like all slides to contain up to 8 lines of text that is all the same size. All of my options in 5.0.2 seem to be Titles will the top line in a larger face that the next lines down. I tried a workaround, creating slides in Quark, exporting them as PDFs and importing into iMovie. Helvetica looked terrible and even with a common, open face like Lucinda Grande there seemed to be degradation from the Quark-generated PDFs.
Any advice?  Thanks!!

Tough to do when you turn a single image into "video". At 30 frames per second you're bound to run into trouble with text.
I use QuickTime Player Pro for single image files. It can import dozens of formats but PNG is probably best because it allows for an "Alpha" channel which can render as transparent (if needed).
Add the single image file to a few seconds of audio (scaled) and you'll have a one image file that plays for the amount of time you need. It isn't converted into "video" (30fps) so it stays "sharp".
Delete the audio track before saving and you have a .mov file that can import into iMovie. Make sure you set the dimensions in your graphics app to match your video dimensions.

Similar Messages

  • I burnt a dvd from a file I exported from quicktime using the share with apple and pc option.  It was burnt directly from the finder. The dvd works perfectly on my mac, and also runs in my windows, but the sound in my windows pc is stammered.

    This is file I created in SnapzPro (which was saved as a Quicktime mov - Animation) of a Powerpoint Presentation.

    Jon, how do I re-compress the Snapz data for dvd playback?
    That depends on your specific work flow strategy. I normally perform the processing in two stages if editing is involved or in a single stage if I don't plan to trim, title, add a narration track, add special effects, and/or add filters to the Snapz Pro X captured screen data.
    In the two-stage process you export the captured data to an intermediate low-compression, high-quality fomat. (This can be the default settings for Snaps Pro X or a more modern editing specific format like ProRes 422/Linear PCM depending on the codec components for which your system is configured and your personal editing preferences.) The Snapz Pro X intermediate file is then edited in the application of your choice and the results are re-compressed to your final target compression format.
    In any case, whether you are re-compressing the data using QT 7 Pro, iMovie, GarageBand, MPEG Streamclip, Snapz Pro X, or similar third-party app that accesses the built-in OS X QT routines, the export process is essentially the same. Whether you use a "Movie to MPEG-4" or "Movie to QT Movie" export, you must export to a data rate limited, multi-pass H.264/AAC compression combination to take advantage of the "Optimize of CD/DVD" option. Specific data rate limits depend on the playback dimensions of the file you are creating, the minimum level of quality you will accept, and the playback speed of the hardware to be used. (I normally target 4X-8X settings for SD content but if you know the recipient has a higher rated optical drive and your content is HD, then you can use higher encode settings for improved quality.)
    I captured the slideshow again in Snapz, and saved it as H264/AAC. Is this good enough?
    If you did not specifically use the "Optimize for..." feature, then the file is automatically targeted for "Computer" playback which assumes playback is from an hard drive which has greater bandwidth/faster throughput than an optical media player. If the target display dimensions are resonably small, the the contextual nature of the H.264 video encoder may or may not be within the playback limitations of an optical drive usually depending on the encode matrix dimensions, graphic complexity of the source data, overall brightness of the scenes, and limitations you may have place on the target file—i.e., the larger the encoding dimensions, the faster the data date and the less likely the file will be compatible with optical drive playback without having to constantly interrupt playback to cache/rebuffer additional data. However, you can always tell the recipient that if this happens, he or she should simply copy the movie file from the CD/DVD to their hard drive for playback.
    What now? Do I open it in Quicktime and use the "share for mac and pc", then right-click on it in the finder and "burn to disc?"
    What you do next depends on how you plan to burn the file. The steps explained above allows you to create a file that is compatible with playback from an optical drive in a QT Player app but is not authored for playback from a commercial DVD Player. Your next step is to burn that file to an optical disc that can be read by your recipient's computer. I my case, I normally burn the disc using a hybrid (HFS Plus/ISO 9660) format which supports HFS Plus, ISO-9660, Rock Ridge, and Joliet with Rock Ridge file systems. How you do this is up to you. You can, for instance, use a third-party app like Toast or Dragon Burn to create a data disc; create/burn an image file with your Disk Utility app (this is a good option if you plan to burn several discs now and/or in the future); create a named "Burn" folder, drop the file to it, and press the burn button; or simply insert a blank optical media disc into you optical drive, change the default disc name to whatever you want, drop your file to the blank media's Finder window, and press the "Burn" button. (NOTE: Burn options may differ depending on the software installed on your system and/or the version of OS X under which you may be operating.)
    Dont see any specs re playback from an optical disc drive? The slideshow is only 3 min long, and I want to avoid turning it into a video DVD using iDVD, iMovie etc, as the quality of the pictures and type degrades badly. Thanks for the help. Been struggling with this for weeks.
    As noted above, this is an encode setting that only becomes active when you are targeting your H.264/AAC encode for multi-pass/data rate limited compression. When active, the "Optimize for..." pop-up allows you to select "computer" (targets playback from a hard drive), "CD/DVD" (targets playback from optical media), or "Streaming" (targets playback from a realtime streaming server) options. This option prevents data rate excursions from exceeding limits normally associated with each of the named types of playback. This option has nothing to do with the file system used to burn the media disc which determines which platforms/OS can read the disc and the file it contains.

  • Very disapointed in Lenovo's service on my T430 machine type 2342CTO with Windows Pro 7 64 bit

    I have been a ThinkPad user since the first model 700.  I have always liked them and when I have had to use other laptops I found them inferior.  However one thing my team has been telling me in the past year or two is that they do not want to purchase anymore Lenovo ThinkPad's.  They have told me that the service and support has been greatly degraded.  I was hesitant to agree with them until my present experience.  We purchase all of our ThinkPad's with a 4 year on-site warranty.  We have people who are in the field and when their computer goes down we need to get it back up and running ASAP.  
    Three weeks ago my hard drive started to give me some problems and  one day after shutting down the computer a message came up that it needed to run Checkdisk which it did.  I was able to keep it going and I did have a backup.   I contacted  the 800 number to talk with a service person and they ordered up service for the replacement of the hard drive and also to replace the fan and sent me the system disks for the T430.  Two days later the insight service person showed up with the parts.  The disks showed up as well via UPS.  The service person replaced the fan and the HDD.  There were 4 DVD's for the system disks.  He started the rebuild and asked if I could finish it and I said I could with no problem.  He left.  I continued the process.  After the 3rd DVD it asked to put in the 4th and when I did a message said that this was the wrong DVD.  I tried all the other 3 with the same response.  I tried building it from scratch again and the same problem.  I called support again and the guy I spoke with thought that I must have a bad DVD and he would send out another set.  That set of 4 DVD’s arrived the next day which I was very thankful for.  He told me that they could only guaranty 2 days.  I thought OK we should be up and running shortly.  The same problem occurred again.  Bear in mind that both sets of these DVD's were all labeled for the ThinkPad T430 machine type 2342 which was my laptop and for Windows Pro 7, 64 bit.  I called Lenovo and this time the tech I spoke with said that there was another set of Disks for my machine that should have been sent.  Of course I was frustrated but there was not a lot I could do about that and I asked if they could make sure that they were overnighted to me so that I would be sure to get them on the next day which was Thursday.  He told me that he could not do that, that they could only guaranty 2 day. I called the next morning to get the tracking number which they gave me and it was supposed to be delivered on Friday which I was very thankful for.  That was Good Friday.  However UPS had some severe weather at their hub in Kentucky and everything was delayed and the disks did not show up until Monday.  I had now been down a whole week from my first call the Monday before. 
    The new set of disks was 3 DVD’s labeled for the T430, Machine type 2342 and Windows Pro 7, 64 bit.  I started the build process.  It continued to work but I made a mistake in the order of disks so I thought that these disks have a problem too.  I called Lenovo and they said that I should just send the system in for depot repair.  I said that will take at least until probably Thursday.  The guy I was speaking to said that I should have it back by Wednesday.  I asked if there was any way that I could send it to them directly that day.  He said no I could not, I had to wait for a box.  I asked if there was anyway to expedite the process and he spoke to his manager and his manager said that the level of service that was on the machine would not allow for any faster service.  The also told me that my service contract would allow me to take it to an authorized Lenovo service center around me.  I said to him that they probably have a queue as well and that I will have to wait for that.  As an aside note we did try service like this with one of our other ThinkPad’s that had a problem and the place messed up the system and we ended up at the end of the day having to send it to their depot for repair.  I hung up and though let me try these disks one more time.  I did and I saw my mistake and the system loaded up the DVD’s properly.  I was getting excited that I could be up and running shortly.  However my excitement was short lived.  Once it started to reboot and expand the installation the drive failed and said that it had to run Checkdisk.  It did and once again there were all kinds of orphaned files etc.  I had to reboot and run it from the DVD’s again and I went through the whole process once again.  The system went into a complete failure and would not do anything.  I called back support with my case # and gave them this information.  The box came the next day and I packed it up and sent it off.  I then started tracking it and it arrived on Wednesday as expected.  Then I wanted to go to the site and track the progress of the repair.  The document you have to fill out and send back with the system gives information on where to go on the web to track the process.  My shows that it arrived on Wednesday 4/8 as expected.  The first message shows “Machine being repaired” at 08:52.  Then I checked later in the early evening hoping to see shipped back to customer.  However what I did see was the following message “Hold for Parts – Service call is on hold until parts arrive”.  Then I kept tracking it and saw another entry on 4/10 at 02:01:54 which was the same “Hold for Parts – Service call is on hold until parts arrive”.  That was of course Friday.  I called the service and they told me that they were waiting on parts which they could not tell me what parts and that there was nothing that they could do.  I then asked if there was anyway to expadite this and the girl I spoke to said that she would seek to accelerate this to another level and that I would get a call from Lenovo in the next 2 to 3 business days!  I said to her that you really mean that that is accelerating it and she said yes.  Yesterday I received a call from an automated attendant, not a real person who told me that they were waiting on parts for my computer and that it could be “5 to 7 business days before they receive the part”.  I could not believe this.  I called again today 4/15 and asked if anyone could tell me the status because the website told me very little.  I told the girl that I was speaking to that I had received this automated attendant telling me that a part would take 5 to 7 business days more.  I asked her if Lenovo kept parts and she said yes but that this part was not in stock.  I asked her what the part was and she was able to find that it was the main system board that had to be replaced.  I said you have already had the unit for 1 week now at depot repair and never mind the fact that I have been without my computer for 2.5 weeks.  She told me that there was nothing she could do and that I had to wait on the part.  That is where this case sits at present.
    I am very very unimpressed with Lenovo’s service.  And furthermore there is no one to talk to about it at Lenovo who gives a care.  I really did not know where to air my grievances with how this case is being handled.  I thought maybe the forum would be a place.  At least others will learn of my dilemma and maybe others have experienced the same thing.
    I still like my ThinkPad but the service of Lenovo has become very poor at best.  The guy that is my technical manager has had a poor experience of late ordering up some other Lenovo products and he does not want to purchase anymore and these were for new product.  They sent the laptop with the wrong software loaded and then said no problem we will send you a new set of disks to load.  He refused and said you have to fix this because it was Lenovo’s mistake.  It takes time to load software and time is money.  I believe we will be leaving the Lenovo field if things continue.  I hope and trust that others will not experience the same treatment as I/we have.  I wonder if Lenovo will even respond to this post.

    I had a real problem with wireless performance on multiple ThinkPads with Win7 until I realized there is a new (or maybe changed implementation) power setting in Win7 which was affecting it.
    If you go into Control Panel -> Power Options and click "Change plan settings" for your current power plan.
    On the next screen click on "Change advanced power settings"
    On the next screen expand "Wireless Adapter Settings" and then "Power Saving Mode"
    Make sure it is set to Maximum Performance.
    Not sure if this will help your particular problem but hope it does.

  • Performance degradation: unfetched field [PublishingPageContent] caused extra roundtrip

    Hi All,
       I am facing some serious application pool crash in one of my customer's Production site SharePoint servers. The Application Error logs in the event Viewer says -
    Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7afa2
    Faulting module name: ntdll.dll, version: 6.1.7601.17514, time stamp: 0x4ce7c8f9
    Exception code: 0xc0000374
    Fault offset: 0x00000000000c40f2
    Faulting process id: 0x1414
    Faulting application start time: 0x01ce5edada76109d
    Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
    Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
    Report Id: 5a69ec1e-cace-11e2-9be2-441ea13bf8be
    At the same time the SharePoint ULS logs says -
    1)
    06/13/2013 03:44:29.53 w3wp.exe (0x0808)                       0x2DF0 SharePoint Foundation        
            General                                8e2s               
    Medium               Unknown SPRequest error occurred. More information: 0x80070005      8b343224-4aa6-490c-8a2a-ce06ac160773
    06/13/2013 03:44:35.03 w3wp.exe (0x0808)                       0x2DF0 SharePoint Foundation        
            General                                      
    8e25      Medium               Failed to look up string with key "FSAdmin_SiteSettings_UserContextManagement_ToolTip", keyfile Microsoft.Office.Server.Search.   
    8b343224-4aa6-490c-8a2a-ce06ac160773
    06/13/2013 03:44:35.03 w3wp.exe (0x0808)                       0x2DF0 SharePoint Foundation        
            General                                8l3c               
    Medium               Localized resource for token 'FSAdmin_SiteSettings_UserContextManagement_ToolTip' could not be found for file with path: "C:\Program Files\Common Files\Microsoft Shared\Web
    Server Extensions\14\Template\Features\SearchExtensions\ExtendedSearchAdminLinks.xml".              8b343224-4aa6-490c-8a2a-ce06ac160773
    2)
    06/13/2013 03:44:29.01 w3wp.exe (0x0808)                       0x2DF0 SharePoint Foundation        
            Web Parts                                    
    emt4     High       Error initializing Safe control - Assembly:Microsoft.Office.SharePoint.ClientExtensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c TypeName: Microsoft.Office.SharePoint.ClientExtensions.Publishing.TakeListOfflineRibbonControl
    Error: Could not load type 'Microsoft.Office.SharePoint.ClientExtensions.Publishing.TakeListOfflineRibbonControl' from assembly 'Microsoft.Office.SharePoint.ClientExtensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'.               
    8b343224-4aa6-490c-8a2a-ce06ac160773
    06/13/2013 03:44:29.50 w3wp.exe (0x0808)                      
    0x2DF0 SharePoint Foundation                 Logging Correlation Data                     
    xmnv     Medium               Site=/    8b343224-4aa6-490c-8a2a-ce06ac160773
    3)
    06/13/2013 03:43:59.67 w3wp.exe (0x263C)                       0x24D8 SharePoint Foundation        
            Performance                     9fx9               
    Medium               Performance degradation: unfetched field [PublishingPageContent] caused extra roundtrip.     at Microsoft.SharePoint.SPListItem.GetValue(SPField fld,
    Int32 columnNumber, Boolean bRaw, Boolean bThrowException)     at Microsoft.SharePoint.SPListItem.GetValue(String strName, Boolean bThrowException)     at Microsoft.SharePoint.SPListItem.get_Item(String fieldName)    
    at Microsoft.SharePoint.WebControls.BaseFieldControl.get_ItemFieldValue()     at Microsoft.SharePoint.Publishing.WebControls.RichHtmlField.RenderFieldForDisplay(HtmlTextWriter output)     at Microsoft.SharePoint.WebControls.BaseFieldControl.Render(HtmlTextWriter
    output)     at Microsoft.SharePoint.Publishing.WebControls.BaseRichField.Render(HtmlTextWriter output)     at Microsoft.SharePoint.Publishing.WebControls.RichHtmlField.R...             
    b8d0b8ca-8386-441f-8fce-d79fe72556e1
    06/13/2013 03:43:59.67*               w3wp.exe (0x263C)                      
    0x24D8 SharePoint Foundation                 Performance                                  
    9fx9       Medium               ...ender(HtmlTextWriter output)     at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection
    children)     at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)     at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)    
    at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)     at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)     at System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter
    writer)     at System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)     at System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer)     at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWrit...            
    b8d0b8ca-8386-441f-8fce-d79fe72556e1
    06/13/2013 03:43:59.67*               w3wp.exe (0x263C)                      
    0x24D8 SharePoint Foundation                 Performance                                  
    9fx9       Medium               ...er writer, ICollection children)     at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,
    ICollection children)     at System.Web.UI.Page.Render(HtmlTextWriter writer)     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)    
    at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)     at System.Web.UI.Page.ProcessRequest()     at System.Web.UI.Page.ProcessRequest(HttpContext context)    
    at Microsoft.SharePoint.Publishing.TemplateRedirectionPage.ProcessRequest(HttpContext context)     at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()     at System.Web.HttpApplication.ExecuteStep(IExecutionSte...       
    b8d0b8ca-8386-441f-8fce-d79fe72556e1
    06/13/2013 03:43:59.67*               w3wp.exe (0x263C)                       
    0x24D8 SharePoint Foundation                 Performance                                  
    9fx9       Medium               ...p step, Boolean& completedSynchronously)     at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception
    error)     at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)     at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)    
    at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)     at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext,
    IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)     at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr module...              
    b8d0b8ca-8386-441f-8fce-d79fe72556e1
    06/13/2013 03:43:59.67*               w3wp.exe (0x263C)                      
    0x24D8 SharePoint Foundation                 Performance                                  
    9fx9       Medium               ...Data, Int32 flags)     at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext,
    IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)                 b8d0b8ca-8386-441f-8fce-d79fe72556e1
    06/13/2013 03:43:59.67 w3wp.exe (0x263C)                      
    0x24D8 SharePoint Foundation                 Performance                     g4zd               
    High       Performance degradation: note field [PublishingPageContent] was not in demoted fields.           b8d0b8ca-8386-441f-8fce-d79fe72556e1
    Anybody has any idea whats going on? I need to fix this ASAP as we are suppose to go live in next few days.
    Soumalya

    Hello Soumalya,
    Do you have an update on your issue? We are actually experiencing a similar issue at a new customer.
    - Dennis | Netherlands | Blog |
    Twitter

  • Performance degradation after setting filesystemio_option=setall from none.

    Hi All,
    We have facing performance degradation after setting filesystemio_option=setall from none on my two servers as mentioned below.
    Red Hat Enterprise Linux AS release 4 (Nahant Update 7) 2.6.9 55.ELhugemem (32-bit)
    Red Hat Enterprise Linux Server release 5.2 (Tikanga) 2.6.18 92.1.10.el5 (64-bit)
    We are seeing lots of Disk I/O happening. We expected "*filesystemio_option=setall* " will improve performance but it is degrading. We getting slowness complains.
    Please let me know do we need to set somethign else along with this ...like any otimizer parameter( e.g. optimizer_index_cost_adj, optimizer_index_caching).
    Please help.

    Hi Suraj,
    <speculation>
    You switched filesystemio_options to setall from none, so, the most likely reason for performance degradation after switching to setall is the implementation of directio. Direct I/O will skip the filesystem buffer cache, and and allow Oracle to read directly from disk to the database buffer cache. However, on a system where direct I/O is not implemented, which is what you had until you recently messed with that parameter, it's likely that you had an undersized database buffer cache, but that was ok, because many (most) of the physical I/Os your database was doing, were actually being serviced by the O/S filesystem buffer cache. But, you introduced direct I/O, and wiped out the ability of the O/S to service any physical I/Os from filesystem buffer cache. This means that every cache miss on the database buffer cache, turns into a real, physical, spin-the-disk, move-the-drive-head, physical I/O. And, you are suffering the performance consequences.
    </speculation>
    Ok, end of speculation. Now, assuming that what I've outlined above is actually going on, what to do? Why is direct I/O lower performing than buffered, non-direct I/O? Shouldn't it's performance be superior?
    Well, when you have an established system that's using buffered I/O, and you switch to direct I/O, you almost always will have to increase the size of the database buffer cache. The problem is that you took a huge chunk of memory away from the the O/S, that it was using to buffer your I/Os and avoid physical I/O. So, now, you need to make up for it, by increasing the size of the database buffer cache. You can do this, without buying more memory for the box, because the O/S is no longer going to need to use so much memory for filesystem buffers.
    So, what to do? Is it worth switching? Well, on balance, it makes sense to use direct I/O, and give Oracle a larger database buffer cache, for the simple fact that (particularly on a server that's dedicated to being an Oracle database server), Oracle has far more sophisticated caching algorithms, and a better understanding of the various types of data being cached, and so should be able to make more efficient use of the memory, than the (relatively) brain dead caching algorithms of the kernel and filesystem mechanisms.
    But, once again, it all comes down to this:
    What problem are you trying to solve? Did you have any I/O related issues? Do you have any compelling reason to implement direct I/O? Rule #1 is "if it ain't broke, don't fix it." Did you just violate rule #1? :-)
    Finally, since you're on Linux, you can use the 'free' command to see how much memory is on the box, how much is free, and how much is dedicated to filesystem cache buffers. This response is already pretty long, so, I'm not going to get into details, however, if you're not familiar with the command, the results could be misleading. Read the man page, and try to be clear about understanding it before you make any assumptions about the output.
    Hope that helps,
    -Mark

  • What type of wireless router is the 1st generation time capsule? Is it B, G or N. I'm trying to understand why our wifi signal is a bit erratic. Paul

    what type of wireless router is the 1st generation time capsule? Is it B, G or N? I'm trying to establish whether its causing signal degradation as a result of conflicts with my BT Home Hub router.

    The 1st generation Time Capsule is an 802.11"n" wireless router, but in default settings it produces a signal that is also compatible with "g" and "b" wireless devices.
    If your HomeHub is in close proximity to the Time Capsule and it is also producing a wireless network, either the wireless on the HomeHub or the TIme Capsule should be be disabled to minimize the chances of wireless interference.
    Interference may also be coming from any cordless phones you may have, or another nearby wireless network as well.

  • PL/SQL Evaluation problem of where clause in case of  NUMBER column type

    I found the following problem in Oracle® Database 2 Day Developer's Guide 11g Release 1 (11.1) B28843-04:
    The sole parameter of function eval_frequency is employee_id IN employees.employee_id%TYPE.
    An ORA-01422 exception occurs when the execution reaches the following select command
    SELECT e.hire_date
    INTO hire_date
    FROM employees e
    WHERE employee_id= e.employee_id;
    A possible cause of the error is that the type of employee_id is NUMBER while the employees.employee_id is NUMBER(6,0) . The result of the selection is the same as there were no WHERE clause at all.
    Everything worked fine, when I declared a temporary variable of NUMBER(6,0) for storing the actual parameter of function and used this variable in the where clause, but I consider this "solution" as being no solution.
    It is pointless to use %TYPE parameter of a function for flexibility if I must degrade this flexibility by a fixed declaration of a temporary variable of the same type as the column in question.
    What is wrong?
    The Developer'Guide I used, the Oracle Sql Developer I used or the PL/SQL version ?

    Hi,
    Welcome to the forum!
    user8949829 wrote:
    A possible cause of the error is that the type of employee_id is NUMBER while the employees.employee_id is NUMBER(6,0) . The result of the selection is the same as there I don't think so. The variable employee_id is defined as having the exact same type as the eponymous column. Even if it didn't, I believe Oracle will always implicity convert between datatypes when possible, rounding if necessary. That may cause errors, but it isn't causing this error.
    No, the error has nothing to do with the data type. It has to do with the ambiguity of employee_id: is it a column, or is it a variable?
    The default is that it means the column name, so
    WHERE   employee_id = e.employee_idis equivalent to saying
    WHERE   e.employee_id = e.employee_idwhich isn't quite the same thing as not having a WHERE clause; rows with NULL employee_id would still be excluded, if there were any.
    I think it's best not to use variable names that are the same as column names. You could call the variable v_employee_id, or, since it's an IN-argument, in_employee_id.
    If you must use a variable that can be mistaken for a column, then qulaify it with the name of the procedure, like this:
    WHERE   eval_frequency.employee_id = e.employee_id
    Everything worked fine, when I declared a temporary variable of NUMBER(6,0) for storing the actual parameter of function That makes sens. You probably gave that variable a name that couldn't be mistaken for a column in the table.
    Edited by: Frank Kulash on Jan 12, 2011 8:27 PM

  • How to prevent degradation of image quality when pasting for collage?

    I am trying to do a collage (of family heirloom old pharmacy jars and bottles) from – eventually – about a dozen separate images in Photoshop CS6.  (A variety of sizes, resolutions, qualities and file types will go into the collage, but I wish to retain the image quality of each component at its original level or very close to the original level, even those in some cases the original quality is marginal.)
    I have set up in Photoshop a “background document” at 300 dpi of the right dimensions to paste into my InDesign document (5.1 X 3.6 cm)
    I have tried >six approaches, all of which have resulted in a degradation of the subsequently pasted-in image (not just slight, but very obvious).
    Clearly I’m missing something fundamental about image quality and handling images so that degradation is minimised or eliminated.
    (1) (1)   Using an internet video as a guide – using Mini Bridge to open all the images in PS6 as tabs along the top of the workpage.  Then dragging the first one into the base document.  It comes across huge – ie I only see a small fraction of the image.  Any attempt to Edit/Transform/Scale (to 14% of the pasted image, which in this case is a jpg of 3170 x 1541 at 1789 dpi, 4.5 x 2.2 cm) results in an image that looks horribly degraded compared with what I pasted (open in another window).
    (2)   (2) Same thing happens if I have each image as a new layer on top of the base document.
    (3)  (3)  I tried changing the image that I had put into Layer 2 into a Smart Object and then resized it.  No further ahead – it still looks horrible.
    (4) using a different image [an 800 dpi JPG 3580 x 1715  Pixels, print size (from dpi) 11.4 x 5.4 cm which despite those parameters is of barely acceptable quality] I have tried (a) changing the resolution to 300 dpi, (b) keeping the number of pixels the same (which results in a dpi of over 3000 but doesn't fix the problem; (c) changing the dimensions to a length of 3 cm [about right for the collage] .... but no matter what I do, by the time the image is positioned correctly on the layer, the image quality has gone from barely acceptable to absolutely horrible. That usually happens during the final resizing (whether by numbers or shift-dragging the corners of the image).
    Grateful for any step-by-step strategy as to how best to accomplish the end – by whatever means.  (Or even in a different program!).  Basically, even though I've used images for many years in many contexts, I have never fundamentally understood image size or resolution to avoid getting into such messes.  Also, I'm on a very steep learning curve with Photoshop, InDesign and Illustrator all at the same time - these all seem to handle images differently, which doesn't help.  [Not to mention MS Publisher, which I'm locked into for certain other things...]

    For the individual images, don't worry about the ppi or as you call it dpi (ppi is the correct term BTW) only worry about the pixel dimensions. If the pixel dimensions gets too low, it will look horrible as there is not enough data to work with.
    Therefore the final document that will house all the other images must be large enough in pixel dimensions to handle the smaller images at a high enough dimension that they will look good.
    That being said, if you can load your images in as smart objects as any scaling that takes place samples the original sized document. Making it possible to scale it down to a size that is barely visible and then reset the size back to where it was and have no loss of data.
    Where the ppi will come into play is when you are ready to print the final document, that is when the ppi will tell the printer at what size to print the document on the page.
    If your collage will span more than one page, you may want to do this in InDesign. All images are linked to their respective container (similar process as smart object in theory) Though I beleive smart objects are embedded which is debatable.
    In both InDesign and Illustrator, scaling the image in the document affects the ppi of the image, scaling down would increase the ppi whereas scaling upward would decrease the ppi as the number of pixels (the pixel dimension) has not changed.
    With photoshop, you have a choice, when scaling the entire document, you have the option to resample the image, doing so affects the pixel dimension and in that instance would degrade the image when scaling downward and bluring the image when scaling up. As photoshop is removing pixels when scaling down and guessing the neighbor pixels should be when scaling upward.
    But, when resampling is off, the pixel dimensions do not change and therefore there is no degration or bluring.
    Why this happens has to do with simple math.
    inches x ppi = pixels
    Knowing any two of the above forumula will give you the third.
    When resampling is enabled, the pixels can change and when it is disabled, it is fixed so only the other two values can change.

  • Group degradation in perceived performance

    Hi there,
    We recently upgraded to SDK 4.5.1 and noticed that our application took a hit in perceived responsiveness in the process. After digging around a bit I ran into a change in the Group class that is responsible for this degradation, the change itself is in bold:
        override public function set scrollRect(value:Rectangle):void    {        // Work-around for Flash Player bug: if GraphicElements share        // the Group's Display Object and cacheAsBitmap is true, the        // scrollRect won't function correctly.         var previous:Boolean = canShareDisplayObject;        super.scrollRect = value;         if (numGraphicElements > 0 && previous != canShareDisplayObject)            invalidateDisplayObjectOrdering();          if (mouseEnabledWhereTransparent && hasMouseListeners)        {                    // Re-render our mouse event fill if necessary.            redrawRequested = true;            super.$invalidateDisplayList();        }    }
    Below please find a small application that illustrates this problem. Note that I have monkey patched Group in the default package so that it is possible to compile with and without the code above. I find that a large screen and Chrome help showcase the problem.
    The part that I am not getting is what was the code in bold trying to fix in the first place?
    Thanks!!
    ~ Miguel
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application
        minWidth="955" minHeight="600"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx"
        xmlns:local="*">
        <fx:Script>
            <![CDATA[
                private var _moveMode:Boolean = false;
                protected function monkeypatchedgroup1_mouseMoveHandler(event:MouseEvent):void
                    // TODO Auto-generated method stub
                    if (_moveMode)
                        redBox.x = event.stageX;
                        redBox.y = event.stageY;
                protected function bordercontainer1_mouseDownHandler(event:MouseEvent):void
                    // TODO Auto-generated method stub
                    _moveMode = true;
                protected function monkeypatchedgroup1_mouseUpHandler(event:MouseEvent):void
                    // TODO Auto-generated method stub
                    _moveMode = false;
            ]]>
        </fx:Script>
        <fx:Declarations>
            <!-- Place non-visual elements (e.g., services, value objects) here -->
        </fx:Declarations>
        <local:MonkeyPatchedGroup
            width="100%" height="100%"
            mouseMove="monkeypatchedgroup1_mouseMoveHandler(event)"
            mouseUp="monkeypatchedgroup1_mouseUpHandler(event)">
            <s:BorderContainer id="redBox"
                width="50" height="50"
                backgroundColor="red"
                mouseDown="bordercontainer1_mouseDownHandler(event)"/>
        </local:MonkeyPatchedGroup>
    </s:Application>
    Here is the monkey patched group:
    //  ADOBE SYSTEMS INCORPORATED
    //  Copyright 2008 Adobe Systems Incorporated
    //  All Rights Reserved.
    //  NOTICE: Adobe permits you to use, modify, and distribute this file
    //  in accordance with the terms of the license agreement accompanying it.
    package
        import flash.display.BlendMode;
        import flash.display.DisplayObject;
        import flash.geom.Rectangle;
        import mx.core.FlexVersion;
        import mx.core.IFlexModule;
        import mx.core.IFontContextComponent;
        import mx.core.IUIComponent;
        import mx.core.IUITextField;
        import mx.core.IVisualElement;
        import mx.core.IVisualElementContainer;
        import mx.core.UIComponent;
        import mx.core.mx_internal;
        import mx.events.FlexEvent;
        import mx.graphics.shaderClasses.ColorBurnShader;
        import mx.graphics.shaderClasses.ColorDodgeShader;
        import mx.graphics.shaderClasses.ColorShader;
        import mx.graphics.shaderClasses.ExclusionShader;
        import mx.graphics.shaderClasses.HueShader;
        import mx.graphics.shaderClasses.LuminosityShader;
        import mx.graphics.shaderClasses.SaturationShader;
        import mx.graphics.shaderClasses.SoftLightShader;
        import mx.styles.IAdvancedStyleClient;
        import mx.styles.ISimpleStyleClient;
        import mx.styles.IStyleClient;
        import mx.styles.StyleProtoChain;
        import spark.components.ResizeMode;
        import spark.components.supportClasses.GroupBase;
        import spark.core.DisplayObjectSharingMode;
        import spark.core.IGraphicElement;
        import spark.core.IGraphicElementContainer;
        import spark.core.ISharedDisplayObject;
        import spark.events.ElementExistenceEvent;
        use namespace mx_internal;
        //  Events
         *  Dispatched when a visual element is added to the content holder.
         *  <code>event.element</code> is the visual element that was added.
         *  @eventType spark.events.ElementExistenceEvent.ELEMENT_ADD
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        [Event(name = "elementAdd", type = "spark.events.ElementExistenceEvent")]
         *  Dispatched when a visual element is removed from the content holder.
         *  <code>event.element</code> is the visual element that's being removed.
         *  @eventType spark.events.ElementExistenceEvent.ELEMENT_REMOVE
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        [Event(name = "elementRemove", type = "spark.events.ElementExistenceEvent")]
        //  Styles
         *  Color of text shadows.
         *  @default #FFFFFF
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        [Style(name = "textShadowColor", type = "uint", format = "Color", inherit = "yes", theme = "mobile")]
         *  Alpha of text shadows.
         *  @default 0.55
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        [Style(name = "textShadowAlpha", type = "Number", inherit = "yes", minValue = "0.0", maxValue = "1.0", theme = "mobile")]
        //  Excluded APIs
        [Exclude(name = "addChild", kind = "method")]
        [Exclude(name = "addChildAt", kind = "method")]
        [Exclude(name = "removeChild", kind = "method")]
        [Exclude(name = "removeChildAt", kind = "method")]
        [Exclude(name = "setChildIndex", kind = "method")]
        [Exclude(name = "swapChildren", kind = "method")]
        [Exclude(name = "swapChildrenAt", kind = "method")]
        [Exclude(name = "numChildren", kind = "property")]
        [Exclude(name = "getChildAt", kind = "method")]
        [Exclude(name = "getChildIndex", kind = "method")]
        //  Other metadata
        [ResourceBundle("components")]
        [DefaultProperty("mxmlContent")]
        [IconFile("Group.png")]
         *  The Group class is the base container class for visual elements.
         *  The Group container takes as children any components that implement
         *  the IUIComponent interface, and any components that implement
         *  the IGraphicElement interface.
         *  Use this container when you want to manage visual children,
         *  both visual components and graphical components.
         *  <p>To improve performance and minimize application size,
         *  the Group container cannot be skinned.
         *  If you want to apply a skin, use the SkinnableContainer instead.</p>
         *  <p><b>Note:</b> The scale grid might not function correctly when there
         *  are DisplayObject children inside of the Group, such as a component
         *  or another Group.  If the children are GraphicElement objects, and
         *  they all share the Group's DisplayObject, then the scale grid works
         *  properly.</p>
         *  <p>Setting any of the following properties on a GraphicElement child
         *  requires that GraphicElement to create its own DisplayObject,
         *  thus negating the scale grid properties on the Group.</p>
         *  <pre>
         *  alpha
         *  blendMode other than BlendMode.NORMAL or "auto"
         *  colorTransform
         *  filters
         *  mask
         *  matrix
         *  rotation
         *  scaling
         *  3D properties
         *  bounds outside the extent of the Group
         *  </pre>
         *  <p>The Group container has the following default characteristics:</p>
         *  <table class="innertable">
         *     <tr><th>Characteristic</th><th>Description</th></tr>
         *     <tr><td>Default size</td><td>Large enough to display its children</td></tr>
         *     <tr><td>Minimum size</td><td>0 pixels</td></tr>
         *     <tr><td>Maximum size</td><td>10000 pixels wide and 10000 pixels high</td></tr>
         *  </table>
         *  @mxml
         *  <p>The <code>&lt;s:Group&gt;</code> tag inherits all of the tag
         *  attributes of its superclass and adds the following tag attributes:</p>
         *  <pre>
         *  &lt;s:Group
         *    <strong>Properties</strong>
         *    blendMode="auto"
         *    mxmlContent="null"
         *    scaleGridBottom="null"
         *    scaleGridLeft="null"
         *    scaleGridRight="null"
         *    scaleGridTop="null"
         *    <strong>Events</strong>
         *    elementAdd="<i>No default</i>"
         *    elementRemove="<i>No default</i>"
         *  /&gt;
         *  </pre>
         *  @see spark.components.DataGroup
         *  @see spark.components.SkinnableContainer
         *  @includeExample examples/GroupExample.mxml
         *  @langversion 3.0
         *  @playerversion Flash 10
         *  @playerversion AIR 1.5
         *  @productversion Flex 4
        public class MonkeyPatchedGroup extends GroupBase implements IVisualElementContainer, IGraphicElementContainer, ISharedDisplayObject
             *  Constructor.
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            public function MonkeyPatchedGroup():void
                super();
            //  Variables
            private var needsDisplayObjectAssignment:Boolean = false;
            private var layeringMode:uint = ITEM_ORDERED_LAYERING;
            private var numGraphicElements:uint = 0;
            private static const ITEM_ORDERED_LAYERING:uint = 0;
            private static const SPARSE_LAYERING:uint = 1;
            //  Overridden properties
            //  baselinePosition
             *  @inheritDoc
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            override public function get baselinePosition():Number
                if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
                    return super.baselinePosition;
                if (!validateBaselinePosition())
                    return NaN;
                var bElement:IVisualElement = baselinePositionElement;
                // If no baselinePositionElement is specified, use the first element
                if (bElement == null)
                    for (var i:int = 0; i < numElements; i++)
                        var elt:IVisualElement = getElementAt(i);
                        if (elt.includeInLayout)
                            bElement = elt;
                            break;
                if (bElement)
                    return bElement.baselinePosition + bElement.y;
                else
                    return super.baselinePosition;
            [Inspectable(category = "General", enumeration = "noScale,scale", defaultValue = "noScale")]
             *  @private
            override public function set resizeMode(value:String):void
                if (isValidScaleGrid())
                    // Force the resize mode to be scale if we
                    // have set scaleGrid properties
                    value = ResizeMode.SCALE;
                super.resizeMode = value;
             *  @private
            override public function set scrollRect(value:Rectangle):void
                // Work-around for Flash Player bug: if GraphicElements share
                // the Group's Display Object and cacheAsBitmap is true, the
                // scrollRect won't function correctly.
                var previous:Boolean = canShareDisplayObject;
                super.scrollRect = value;
                if (numGraphicElements > 0 && previous != canShareDisplayObject)
                    invalidateDisplayObjectOrdering();
                if (mouseEnabledWhereTransparent && hasMouseListeners)
                    // Re-render our mouse event fill if necessary.
                    redrawRequested = true;
                    trace("Calling invalidateDisplayList in GroupBase");
                    super.$invalidateDisplayList();
             * @private
            override mx_internal function set hasMouseListeners(value:Boolean):void
                if (mouseEnabledWhereTransparent)
                    redrawRequested = true;
                super.hasMouseListeners = value;
             *  @private
            override public function set width(value:Number):void
                if (_width != value)
                    if (mouseEnabledWhereTransparent && hasMouseListeners)
                        // Re-render our mouse event fill if necessary.
                        redrawRequested = true;
                        super.$invalidateDisplayList();
                super.width = value;
             *  @private
            override public function set height(value:Number):void
                if (_height != value)
                    if (mouseEnabledWhereTransparent && hasMouseListeners)
                        // Re-render our mouse event fill if necessary.
                        redrawRequested = true;
                        super.$invalidateDisplayList();
                super.height = value;
            //  Properties
            //  alpha
            [Inspectable(defaultValue = "1.0", category = "General", verbose = "1")]
             *  @private
            override public function set alpha(value:Number):void
                if (super.alpha == value)
                    return;
                if (_blendMode == "auto")
                    // If alpha changes from an opaque/transparent (1/0) and translucent
                    // (0 < value < 1), then trigger a blendMode change
                    if ((value > 0 && value < 1 && (super.alpha == 0 || super.alpha == 1)) || ((value == 0 || value == 1) && (super.alpha > 0 && super.alpha < 1)))
                        blendModeChanged = true;
                        invalidateDisplayObjectOrdering();
                        invalidateProperties();
                super.alpha = value;
            //  baselinePositionElement
            private var _baselinePositionElement:IVisualElement;
             *  The element used to calculate the GroupBase's baselinePosition
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            public function get baselinePositionElement():IVisualElement
                return _baselinePositionElement;
             *  @private
            public function set baselinePositionElement(value:IVisualElement):void
                if (value === _baselinePositionElement)
                    return;
                _baselinePositionElement = value;
                invalidateParentSizeAndDisplayList();
            //  blendMode
             *  @private
             *  Storage for the blendMode property.
            private var _blendMode:String = "auto";
            private var blendModeChanged:Boolean;
            private var blendShaderChanged:Boolean;
            [Inspectable(category = "General", enumeration = "auto,add,alpha,darken,difference,erase,hardlight,invert,layer,lighten,multiply,normal,subtract,screen,overlay,colordodge,colorburn,exclusion,softlight,hue,saturation,color,luminosity", defaultValue = "auto")]
             *  A value from the BlendMode class that specifies which blend mode to use.
             *  A bitmap can be drawn internally in two ways.
             *  If you have a blend mode enabled or an external clipping mask, the bitmap is drawn
             *  by adding a bitmap-filled square shape to the vector render.
             *  If you attempt to set this property to an invalid value,
             *  Flash Player or Adobe AIR sets the value to <code>BlendMode.NORMAL</code>.
             *  <p>A value of "auto" (the default) is specific to Group's use of
             *  blendMode and indicates that the underlying blendMode should be
             *  <code>BlendMode.NORMAL</code> except when <code>alpha</code> is not
             *  equal to either 0 or 1, when it is set to <code>BlendMode.LAYER</code>.
             *  This behavior ensures that groups have correct
             *  compositing of their graphic objects when the group is translucent.</p>
             *  @default "auto"
             *  @see flash.display.DisplayObject#blendMode
             *  @see flash.display.BlendMode
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            override public function get blendMode():String
                return _blendMode;
             *  @private
            override public function set blendMode(value:String):void
                if (value == _blendMode)
                    return;
                invalidateProperties();
                blendModeChanged = true;
                //The default blendMode in FXG is 'auto'. There are only
                //certain cases where this results in a rendering difference,
                //one being when the alpha of the Group is > 0 and < 1. In that
                //case we set the blendMode to layer to avoid the performance
                //overhead that comes with a non-normal blendMode.
                if (value == "auto")
                    _blendMode = value;
                    // SDK-29631: Use super.$blendMode instead of super.blendMode
                    // since Group completely overrides blendMode and we
                    // want to bypass the extra logic in UIComponent which
                    // has its own override.
                    // TODO (egeorgie): figure out whether we can share some
                    // of that logic in the future.
                    if (((alpha > 0 && alpha < 1) && super.$blendMode != BlendMode.LAYER) || ((alpha == 1 || alpha == 0) && super.$blendMode != BlendMode.NORMAL))
                        invalidateDisplayObjectOrdering();
                else
                    var oldValue:String = _blendMode;
                    _blendMode = value;
                    // If one of the non-native Flash blendModes is set,
                    // record the new value and set the appropriate
                    // blendShader on the display object.
                    if (isAIMBlendMode(value))
                        blendShaderChanged = true;
                    // Only need to re-do display object assignment if blendmode was normal
                    // and is changing to something else, or the blend mode was something else
                    // and is going back to normal.  This is because display object sharing
                    // only happens when blendMode is normal.
                    if ((oldValue == BlendMode.NORMAL || value == BlendMode.NORMAL) && !(oldValue == BlendMode.NORMAL && value == BlendMode.NORMAL))
                        invalidateDisplayObjectOrdering();
            //  mxmlContent
            private var mxmlContentChanged:Boolean = false;
            private var _mxmlContent:Array;
            [ArrayElementType("mx.core.IVisualElement")]
             *  The visual content children for this Group.
             *  This method is used internally by Flex and is not intended for direct
             *  use by developers.
             *  <p>The content items should only be IVisualElement objects.
             *  An <code>mxmlContent</code> Array should not be shared between multiple
             *  Group containers because visual elements can only live in one container
             *  at a time.</p>
             *  <p>If the content is an Array, do not modify the Array
             *  directly. Use the methods defined by the Group class instead.</p>
             *  @default null
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            public function set mxmlContent(value:Array):void
                if (createChildrenCalled)
                    setMXMLContent(value);
                else
                    mxmlContentChanged = true;
                    _mxmlContent = value;
                        // we will validate this in createChildren();
             *  @private
            mx_internal function getMXMLContent():Array
                if (_mxmlContent)
                    return _mxmlContent.concat();
                else
                    return null;
             *  @private
             *  Adds the elements in <code>mxmlContent</code> to the Group.
             *  Flex calls this method automatically; you do not call it directly.
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            private function setMXMLContent(value:Array):void
                var i:int;
                // if there's old content and it's different than what
                // we're trying to set it to, then let's remove all the old
                // elements first.
                if (_mxmlContent != null && _mxmlContent != value)
                    for (i = _mxmlContent.length - 1; i >= 0; i--)
                        elementRemoved(_mxmlContent[i], i);
                _mxmlContent = (value) ? value.concat() : null; // defensive copy
                if (_mxmlContent != null)
                    var n:int = _mxmlContent.length;
                    for (i = 0; i < n; i++)
                        var elt:IVisualElement = _mxmlContent[i];
                        // A common mistake is to bind the viewport property of a Scroller
                        // to a group that was defined in the MXML file with a different parent   
                        if (elt.parent && (elt.parent != this))
                            throw new Error(resourceManager.getString("components", "mxmlElementNoMultipleParents",
                                                                      [ elt ]));
                        elementAdded(elt, i);
            //  Properties: ScaleGrid
            private var scaleGridChanged:Boolean = false;
            // store the scaleGrid into a rectangle to save space (top, left, bottom, right);
            private var scaleGridStorageVariable:Rectangle;
            //  scale9Grid
             *  @private
            override public function set scale9Grid(value:Rectangle):void
                if (value != null)
                    scaleGridTop = value.top;
                    scaleGridBottom = value.bottom;
                    scaleGridLeft = value.left;
                    scaleGridRight = value.right;
                else
                    scaleGridTop = NaN;
                    scaleGridBottom = NaN;
                    scaleGridLeft = NaN;
                    scaleGridRight = NaN;
            //  scaleGridBottom
            [Inspectable(category = "General")]
             *  Specifies the bottom coordinate of the scale grid.
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            public function get scaleGridBottom():Number
                if (scaleGridStorageVariable)
                    return scaleGridStorageVariable.height;
                return NaN;
            public function set scaleGridBottom(value:Number):void
                if (!scaleGridStorageVariable)
                    scaleGridStorageVariable = new Rectangle(NaN, NaN, NaN, NaN);
                if (value != scaleGridStorageVariable.height)
                    scaleGridStorageVariable.height = value;
                    scaleGridChanged = true;
                    invalidateProperties();
                    invalidateDisplayList();
            //  scaleGridLeft
            [Inspectable(category = "General")]
             * Specifies the left coordinate of the scale grid.
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            public function get scaleGridLeft():Number
                if (scaleGridStorageVariable)
                    return scaleGridStorageVariable.x;
                return NaN;
            public function set scaleGridLeft(value:Number):void
                if (!scaleGridStorageVariable)
                    scaleGridStorageVariable = new Rectangle(NaN, NaN, NaN, NaN);
                if (value != scaleGridStorageVariable.x)
                    scaleGridStorageVariable.x = value;
                    scaleGridChanged = true;
                    invalidateProperties();
                    invalidateDisplayList();
            //  scaleGridRight
            [Inspectable(category = "General")]
             * Specifies the right coordinate of the scale grid.
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            public function get scaleGridRight():Number
                if (scaleGridStorageVariable)
                    return scaleGridStorageVariable.width;
                return NaN;
            public function set scaleGridRight(value:Number):void
                if (!scaleGridStorageVariable)
                    scaleGridStorageVariable = new Rectangle(NaN, NaN, NaN, NaN);
                if (value != scaleGridStorageVariable.width)
                    scaleGridStorageVariable.width = value;
                    scaleGridChanged = true;
                    invalidateProperties();
                    invalidateDisplayList();
            //  scaleGridTop
            [Inspectable(category = "General")]
             * Specifies the top coordinate of the scale grid.
             *  @langversion 3.0
             *  @playerversion Flash 10
             *  @playerversion AIR 1.5
             *  @productversion Flex 4
            public function get scaleGridTop():Number
                if (scaleGridStorageVariable)
                    return scaleGridStorageVariable.y;
                return NaN;
            public function set scaleGridTop(value:Number):void
                if (!scaleGridStorageVariable)
                    scaleGridStorageVariable = new Rectangle(NaN, NaN, NaN, NaN);
                if (value != scaleGridStorageVariable.y)
                    scaleGridStorageVariable.y = value;
                    scaleGridChanged = true;
                    invalidateProperties();
                    invalidateDisplayList();
            private function isValidScaleGrid():Boolean
                return !isNaN(scaleGridLeft) && !isNaN(scaleGridTop) && !isNaN(scaleGridRight) && !isNaN(scaleGridBottom);
            //  Overridden methods: UIComponent
             *  @private
             *  Whether createChildren() has been called or not.
             *  We use this in the setter for mxmlContent to know
             *  whether to validate the value immediately, or just
             *  wait to let createChildren() do it.
            private var createChildrenCalled:Boolean = false;
             *  @private
            override protected function createChildren():void
                super.createChildren();
                createChildrenCalled = true;
                if (mxmlContentChanged)
                    mxmlContentChanged = false;
                    setMXMLContent(_mxmlContent);
             *  @private
            override public function validateProperties():void
                super.validateProperties();
                // Property validation happens top-down, so now let's
                // validate graphic element properties after
                // calling super.validateProperties()
                if (numGraphicElements > 0)
                    var length:int = numElements;
                    for (var i:int = 0; i < length; i++)
                        var element:IGraphicElement = getElementAt(i) as IGraphicElement;
                        if (element)
                            element.validateProperties();
             *  @private
            override protected function commitProperties():void
                super.commitProperties();
                invalidatePropertiesFlag = false;
                if (blendModeChanged)
                    blendModeChanged = false;
                    // Figure out the correct blendMode value
                    // to set.
                    // SDK-29631: Use super.$blendMode instead of super.blendMode
                    // since Group completely overrides blendMode and we
                    // want to bypass the extra logic in UIComponent which
                    // has its own override.
                    // TODO (egeorgie): figure out whether we can share some
                    // of that logic in the future.
                    if (_blendMode == "auto")
                        if (alpha == 0 || alpha == 1)
                            super.$blendMode = BlendMode.NORMAL;
                        else
                            super.$blendMode = BlendMode.LAYER;
                    else if (!isAIMBlendMode(_blendMode))
                        super.$blendMode = _blendMode;
                    if (blendShaderChanged)
                        // The graphic element's blendMode was set to a non-Flash
                        // blendMode. We mimic the look by instantiating the
                        // appropriate shader class and setting the blendShader
                        // property on the displayObject.
                        blendShaderChanged = false;
                        switch (_blendMode)
                            case "color":
                                super.blendShader = new ColorShader();
                                break;
                            case "colordodge":
                                super.blendShader = new ColorDodgeShader();
                                break;
                            case "colorburn":
                                super.blendShader = new ColorBurnShader();
                                break;
                            case "exclusion":
                                super.blendShader = new ExclusionShader();
                                break;
                            case "hue":
                                super.blendShader = new HueShader();
                                break;
                            case "luminosity":
                                super.blendShader = new LuminosityShader();
                                break;
                            case "saturation":
                                super.blendShader = new SaturationShader();
                                break;
                            case "softlight":
                                super.blendShader = new SoftLightShader();
                                break;
                // Due to dependent properties alpha and blendMode there may be a need
                // for a second pass at committing properties (to ensure our new
                // blendMode or blendShader is assigned to our underlying display
                // object).
                if (invalidatePropertiesFlag)
                    super.commitProperties();
                    invalidatePropertiesFlag = false;
                if (needsDisplayObjectAssignment)
                    needsDisplayObjectAssignment = false;
                    assignDisplayObjects();
                if (scaleGridChanged)
                    // Don't reset scaleGridChanged since we also check it in updateDisplayList
                    if (isValidScaleGrid())
                        resizeMode = ResizeMode.SCALE; // Force the resizeMode to scale
             *  @private
            override public function validateSize(recursive:Boolean = false):void
                // Since IGraphicElement is not ILayoutManagerClient, we need to make sure we
                // validate sizes of the elements, even in cases where recursive==false.
                // Size validation happens bottom-up, so now let's
                // validate graphic element size before
                // calling super.validateSize()
                if (numGraphicElements > 0)
                    var length:int = numElements;
                    for (var i:int = 0; i < length; i++)
                        var element:IGraphicElement = getElementAt(i) as IGraphicElement;
                        if (element)
                            element.validateSize();
                super.validateSize(recursive);
             *  @private
            override public function setActualSize(w:Number, h:Number):void
                if (_width != w || _height != h)
                    if (mouseEnabledWhereTransparent && hasMouseListeners)
                        // Re-render our mouse event fill if necessary.
                        redrawRequested = true;
                        super.$invalidateDisplayList();
                super.setActualSize(w, h);
             *  @private
            override public function validateDisplayList():void
                // call super.validateDisplayList() and let updateDisplayList() run
                super.validateDisplayList();
                // If the DisplayObject assignment is still not completed, then postpone validation
                // of the GraphicElements. invalidateDisplayList() will be called during the next
                // commitProperties() call since needsDisplayObjectAssignment=true,
                // so we will be re-running validateDisplayList() anyways
                if (needsDisplayObjectAssignment && invalidatePropertiesFlag)
                    return;
                // DisplayList validation happens top-down, so we should
                // validate graphic element DisplayList after
                // calling super.validateDisplayList().  This is
                // gets tricky because of graphic-element sharing.  We clear
                // Group's graphic's object in updateDisplayList() and handle the
                // rest of the DisplayList validation in here.
                // Iterate through the graphic elements. If an element has a displayObject that has been
                // invalidated, then validate all graphic elements that draw to this displayObject.
                // The algorithm assumes that all of the elements that share a displayObject are in between
                // the element with the shared displayObject and the next element that has a displayObject.
                var sharedDisplayObject:ISharedDisplayObject = this;
                if (numGraphicElements > 0)
                    var length:int = numElements;
                    for (var i:int = 0; i < length; i++)
                        var element:IGraphicElement = getElementAt(i) as IGraphicElement;
                        if (!element)
                            continue;
                        // Do a special check for layer, we may stumble upon an element with layer != 0
                        // before we're done with the current shared sequence and we don't want to mark
                        // the sequence as valid, until we reach the next sequence.  
                        if (element.depth == 0)
                            // Is this the start of a new shared sequence?         
                            if (element.displayObjectSharingMode != DisplayObjectSharingMode.USES_SHARED_OBJECT)
                                // We have finished redrawing the previous sequence
                                if (sharedDisplayObject)
                                    sharedDisplayObject.redrawRequested = false;
                                // Start the new sequence
                                sharedDisplayObject = element.displayObject as ISharedDisplayObject;
                            if (!sharedDisplayObject || sharedDisplayObject.redrawRequested)
                                element.validateDisplayList();
                        else
                            // If we have layering, we don't share the display objects.
                            // Don't update the current sharedDisplayObject
                            var elementDisplayObject:ISharedDisplayObject = element.displayObject as ISharedDisplayObject;
                            if (!elementDisplayObject || elementDisplayObject.redrawRequested)
                                element.validateDisplayList();
                                if (elementDisplayObject)
                                    elementDisplayObject.redrawRequested = false;
                // Mark the last shared displayObject valid
                if (sharedDisplayObject)
                    sharedDisplayObject.redrawRequested = false;
             *  @private
            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
                // let user's code (layout) run first before dealing with graphic element
                // sharing because that's when redraws can be requested
                super.updateDisplayList(unscaledWidth, unscaledHeight);
                // Clear the group's graphic because graphic elements might be drawing to it
                // This isn't needed for DataGroup because there's no DisplayObject sharing
                // This code exists in updateDisplayList() as opposed to validateDisplayList()
                // because of compatibility issues since most of this code was
                // refactored from updateDisplayList() and in to validateDisplayList().  User's code
                // already assumed that they could call super.updateDisplayList() and then be able to draw
                // into the Group's graphics object.  Because of that, the graphics.clear() call is left
                // in updateDisplayList() instead of in validateDisplayList() with the rest of the graphic
                // element sharing code.
                var sharedDisplayObject:ISharedDisplayObject = this;
                if (sharedDisplayObject.redrawRequested)
                    // clear the graphics here.  The pattern is usually to call graphics.clear()
                    // before calling super.updateDisplayList() so what happens in super.updateDisplayList()
                    // isn't erased.  However, in this case, what happens in super.updateDisplayList() isn't
                    // much, and we want to make sure super.updateDisplayList() runs first since the layout
                    // is what actually triggers the the shareDisplayObject to request to be redrawn.
                    graphics.clear();
                    drawBackground();
                    // If a scaleGrid is set, make sure the extent of the groups bounds are filled so
                    // the player will scale our contents as expected.
                    if (isValidScaleGrid() && resizeMode == ResizeMode.SCALE)
                        graphics.lineStyle();
                        graphics.beginFill(0, 0);
                        graphics.drawRect(0, 0, 1, 1);
                        graphics.drawRect(measuredWidth - 1, measuredHeight - 1, 1, 1);
                        graphics.endFill();
                if (scaleGridChanged)
                    scaleGridChanged = false;
                    if (isValidScaleGrid())
                        // Check for DisplayObjects other than overlays
                        var overlayCount:int = _overlay ? _overlay.numDisplayObjects : 0;
                        if (numChildren - overlayCount > 0)
                            throw new Error(resourceManager.getString("components", "scaleGridGroupError"));
                        super.scale9Grid = new Rectangle(scaleGridLeft,
                                                         scaleGridTop,
                                                         scaleGridRight - scaleGridLeft,
                                                         scaleGridBottom - scaleGridTop);
                    else
                        super.scale9Grid = null;
             *  @private
             *  TODO (rfrishbe): Most of this code is a duplicate of UIComponent::notifyStyleChangeInChildren,
             *  refactor as appropriate to avoid code duplication once we have a common
             *  child iterator between UIComponent and Group.
            override public function notifyStyleChangeInChildren(
                styleProp:String, recursive:Boolean):void
                if (mxmlContentChanged || !recursive)
                    return;
                var n:int = numElements;
                for (var i:int = 0; i < n; i++)
                    var child:ISimpleStyleClient = getElementAt(i) as ISimpleStyleClient;
                    if (child)
                        child.styleChanged(styleProp);
                        if (child is IStyleClient)
                            IStyleClient(child).notifyStyleChangeInChildren(styleProp,
                                                                            recursive);
                if (advanceStyleClientChildren != null)
                    for (var styleClient:Object in advanceStyleClientChildren)
                        var iAdvanceStyleClientChild:IAdvancedStyleClient = styleClient as IAdvancedStyleClient;
                        if (iAdvanceStyleClientChild)
                            iAdvanceStyleClientChild.styleChanged(styleProp);
             *  @private
             *  TODO (rfrishbe): Most of this code is a duplicate of UIComponent::regenerateStyleCache,
             *  refactor as appropriate to avoid code duplication once we have a common
             *  child iterator between UIComponent and Group.
            override public function regenerateStyleCache(recursive:Boolean):void
                // Regenerate the proto chain for this object
                initProtoChain();
                // Recursively call this method on each child.
                var n:int = numElements;
                for (var i:int = 0; i < n; i++)
                    var child:IVisualElement = getElementAt(i);
                    if (child is IStyleClient)
                        // Does this object already have a proto chain?
                        // If not, there's no need to regenerate a new one.
                        if (IStyleClient(child).inheritingStyles != StyleProtoChain.STYLE_UNINITIALIZED)
                            IStyleClient(child).regenerateStyleCache(recursive);
                    else if (child is IUITextField)
                        // Does this object already have a proto chain?
                        // If not, there's no need to regenerate a new one.
                        if (IUITextField(child).inheritingStyles)
                            StyleProtoChain.initTextField(IUITextField(child));
                // Call this method on each non-visual StyleClient
                if (advanceStyleClientChildren != null)
                    for (var styleClient:Object in advanceStyleClientChildren)
                        var iAdvanceStyleClientChild:IAdvancedStyleClient = styleClient as IAdvancedStyleClient;
                        if (iAdvanceStyleClientChild && iAdvanceStyleClientChild.inheritingStyles != StyleProtoChain.STYLE_UNINITIALIZED)
                            iAdvanceStyleClientChild.regenerateStyleCache(recursive);
            //  Content management
             *  @private
            override public function get numElements():int
                if (_mxmlContent == null)
                    return 0;
                return _mxmlContent.length;
             *  @private
            override public function getElementAt(index:int):IVisualElement
                // check for RangeError:
                checkForRangeError(index);
                return _mxmlContent[index];
             *  @private
             *  Checks the range of index to make sure it's valid
            private function checkForRangeError(index:int, addingElement:Boolean = false):void
                // figure out the maximum allowable index
                var maxIndex:int = (_mxmlContent == null ? -1 : _mxmlContent.length - 1);
                // if adding an element, we allow an extra index at the end
                if (addingElement)
                    maxIndex++;
                if (index < 0 || index > maxIndex)
                    throw new RangeError(resourceManager.getString("components", "indexOutOfRange",
                                                                   [ index ]));
             * @private
            private function isAIMBlendMode(value:String):Boolean
                if (value == "colordodge" || value == "colorburn" || value == "exclusion" || value == "softlight" || value == "hue" || value == "saturatio

    FYI - This regression has been filed here: http://bugs.adobe.com/jira/browse/SDK-31989

  • When table with clustered columnstore indexe is partitioned the performance degrades if data is located in multiple partitions

    Hello,
    Below I provide a complete code to re-produce the behavior I am observing.  You could run it in tempdb or any other database, which is not important.  The test query provided at the top of the script is pretty silly, but I have observed the same
    performance degradation with about a dozen of various queries of different complexity, so this is just the simplest one I am using as an example here. Note that I also included approximate run times in the script comments (this is obviously based on what I
    observed on my machine).  Here are the steps with numbers corresponding to the numbers in the script:
    1. Run script from #1 to #7.  This will create the two test tables, populate them with records (40 mln. and 10 mln.) and build regular clustered indexes.
    2. Run test query (at the top of the script).  Here are the execution statistics:
    Table 'Main'. Scan count 5, logical reads 151435, physical reads 0, read-ahead reads 4, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Txns'. Scan count 5, logical reads 74155, physical reads 0, read-ahead reads 7, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
     SQL Server Execution Times:
       CPU time = 5514 ms, 
    elapsed time = 1389 ms.
    3. Run script from #8 to #9. This will replace regular clustered indexes with columnstore clustered indexes.
    4. Run test query (at the top of the script).  Here are the execution statistics:
    Table 'Txns'. Scan count 4, logical reads 44563, physical reads 0, read-ahead reads 37186, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Main'. Scan count 4, logical reads 54850, physical reads 2, read-ahead reads 96862, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
     SQL Server Execution Times:
       CPU time = 828 ms, 
    elapsed time = 392 ms.
    As you can see the query is clearly faster.  Yay for columnstore indexes!.. But let's continue.
    5. Run script from #10 to #12 (note that this might take some time to execute).  This will move about 80% of the data in both tables to a different partition.  You should be able to see the fact that the data has been moved when running Step #
    11.
    6. Run test query (at the top of the script).  Here are the execution statistics:
    Table 'Txns'. Scan count 4, logical reads 44563, physical reads 0, read-ahead reads 37186, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Main'. Scan count 4, logical reads 54817, physical reads 2, read-ahead reads 96862, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
     SQL Server Execution Times:
       CPU time = 8172 ms, 
    elapsed time = 3119 ms.
    And now look, the I/O stats look the same as before, but the performance is the slowest of all our tries!
    I am not going to paste here execution plans or the detailed properties for each of the operators.  They show up as expected -- column store index scan, parallel/partitioned = true, both estimated and actual number of rows is less than during the second
    run (when all of the data resided on the same partition).
    So the question is: why is it slower?
    Thank you for any help!
    Here is the code to re-produce this:
    --==> Test Query - begin --<===
    DBCC DROPCLEANBUFFERS
    DBCC FREEPROCCACHE
    SET STATISTICS IO ON
    SET STATISTICS TIME ON
    SELECT COUNT(1)
    FROM Txns AS z WITH(NOLOCK)
    LEFT JOIN Main AS mmm WITH(NOLOCK) ON mmm.ColBatchID = 70 AND z.TxnID = mmm.TxnID AND mmm.RecordStatus = 1
    WHERE z.RecordStatus = 1
    --==> Test Query - end --<===
    --===========================================================
    --1. Clean-up
    IF OBJECT_ID('Txns') IS NOT NULL DROP TABLE Txns
    IF OBJECT_ID('Main') IS NOT NULL DROP TABLE Main
    IF EXISTS (SELECT 1 FROM sys.partition_schemes WHERE name = 'PS_Scheme') DROP PARTITION SCHEME PS_Scheme
    IF EXISTS (SELECT 1 FROM sys.partition_functions WHERE name = 'PF_Func') DROP PARTITION FUNCTION PF_Func
    --2. Create partition funciton
    CREATE PARTITION FUNCTION PF_Func(tinyint) AS RANGE LEFT FOR VALUES (1, 2, 3)
    --3. Partition scheme
    CREATE PARTITION SCHEME PS_Scheme AS PARTITION PF_Func ALL TO ([PRIMARY])
    --4. Create Main table
    CREATE TABLE dbo.Main(
    SetID int NOT NULL,
    SubSetID int NOT NULL,
    TxnID int NOT NULL,
    ColBatchID int NOT NULL,
    ColMadeId int NOT NULL,
    RecordStatus tinyint NOT NULL DEFAULT ((1))
    ) ON PS_Scheme(RecordStatus)
    --5. Create Txns table
    CREATE TABLE dbo.Txns(
    TxnID int IDENTITY(1,1) NOT NULL,
    GroupID int NULL,
    SiteID int NULL,
    Period datetime NULL,
    Amount money NULL,
    CreateDate datetime NULL,
    Descr varchar(50) NULL,
    RecordStatus tinyint NOT NULL DEFAULT ((1))
    ) ON PS_Scheme(RecordStatus)
    --6. Populate data (credit to Jeff Moden: http://www.sqlservercentral.com/articles/Data+Generation/87901/)
    -- 40 mln. rows - approx. 4 min
    --6.1 Populate Main table
    DECLARE @NumberOfRows INT = 40000000
    INSERT INTO Main (
    SetID,
    SubSetID,
    TxnID,
    ColBatchID,
    ColMadeID,
    RecordStatus)
    SELECT TOP (@NumberOfRows)
    SetID = ABS(CHECKSUM(NEWID())) % 500 + 1, -- ABS(CHECKSUM(NEWID())) % @Range + @StartValue,
    SubSetID = ABS(CHECKSUM(NEWID())) % 3 + 1,
    TxnID = ABS(CHECKSUM(NEWID())) % 1000000 + 1,
    ColBatchId = ABS(CHECKSUM(NEWID())) % 100 + 1,
    ColMadeID = ABS(CHECKSUM(NEWID())) % 500000 + 1,
    RecordStatus = 1
    FROM sys.all_columns ac1
    CROSS JOIN sys.all_columns ac2
    --6.2 Populate Txns table
    -- 10 mln. rows - approx. 1 min
    SET @NumberOfRows = 10000000
    INSERT INTO Txns (
    GroupID,
    SiteID,
    Period,
    Amount,
    CreateDate,
    Descr,
    RecordStatus)
    SELECT TOP (@NumberOfRows)
    GroupID = ABS(CHECKSUM(NEWID())) % 5 + 1, -- ABS(CHECKSUM(NEWID())) % @Range + @StartValue,
    SiteID = ABS(CHECKSUM(NEWID())) % 56 + 1,
    Period = DATEADD(dd,ABS(CHECKSUM(NEWID())) % 365, '05-04-2012'), -- DATEADD(dd,ABS(CHECKSUM(NEWID())) % @Days, @StartDate)
    Amount = CAST(RAND(CHECKSUM(NEWID())) * 250000 + 1 AS MONEY),
    CreateDate = DATEADD(dd,ABS(CHECKSUM(NEWID())) % 365, '05-04-2012'),
    Descr = REPLICATE(CHAR(65 + ABS(CHECKSUM(NEWID())) % 26), ABS(CHECKSUM(NEWID())) % 20),
    RecordStatus = 1
    FROM sys.all_columns ac1
    CROSS JOIN sys.all_columns ac2
    --7. Add PK's
    -- 1 min
    ALTER TABLE Txns ADD CONSTRAINT PK_Txns PRIMARY KEY CLUSTERED (RecordStatus ASC, TxnID ASC) ON PS_Scheme(RecordStatus)
    CREATE CLUSTERED INDEX CDX_Main ON Main(RecordStatus ASC, SetID ASC, SubSetId ASC, TxnID ASC) ON PS_Scheme(RecordStatus)
    --==> Run test Query --<===
    --===========================================================
    -- Replace regular indexes with clustered columnstore indexes
    --===========================================================
    --8. Drop existing indexes
    ALTER TABLE Txns DROP CONSTRAINT PK_Txns
    DROP INDEX Main.CDX_Main
    --9. Create clustered columnstore indexes (on partition scheme!)
    -- 1 min
    CREATE CLUSTERED COLUMNSTORE INDEX PK_Txns ON Txns ON PS_Scheme(RecordStatus)
    CREATE CLUSTERED COLUMNSTORE INDEX CDX_Main ON Main ON PS_Scheme(RecordStatus)
    --==> Run test Query --<===
    --===========================================================
    -- Move about 80% the data into a different partition
    --===========================================================
    --10. Update "RecordStatus", so that data is moved to a different partition
    -- 14 min (32002557 row(s) affected)
    UPDATE Main
    SET RecordStatus = 2
    WHERE TxnID < 800000 -- range of values is from 1 to 1 mln.
    -- 4.5 min (7999999 row(s) affected)
    UPDATE Txns
    SET RecordStatus = 2
    WHERE TxnID < 8000000 -- range of values is from 1 to 10 mln.
    --11. Check data distribution
    SELECT
    OBJECT_NAME(SI.object_id) AS PartitionedTable
    , DS.name AS PartitionScheme
    , SI.name AS IdxName
    , SI.index_id
    , SP.partition_number
    , SP.rows
    FROM sys.indexes AS SI WITH (NOLOCK)
    JOIN sys.data_spaces AS DS WITH (NOLOCK)
    ON DS.data_space_id = SI.data_space_id
    JOIN sys.partitions AS SP WITH (NOLOCK)
    ON SP.object_id = SI.object_id
    AND SP.index_id = SI.index_id
    WHERE DS.type = 'PS'
    AND OBJECT_NAME(SI.object_id) IN ('Main', 'Txns')
    ORDER BY 1, 2, 3, 4, 5;
    PartitionedTable PartitionScheme IdxName index_id partition_number rows
    Main PS_Scheme CDX_Main 1 1 7997443
    Main PS_Scheme CDX_Main 1 2 32002557
    Main PS_Scheme CDX_Main 1 3 0
    Main PS_Scheme CDX_Main 1 4 0
    Txns PS_Scheme PK_Txns 1 1 2000001
    Txns PS_Scheme PK_Txns 1 2 7999999
    Txns PS_Scheme PK_Txns 1 3 0
    Txns PS_Scheme PK_Txns 1 4 0
    --12. Update statistics
    EXEC sys.sp_updatestats
    --==> Run test Query --<===

    Hello Michael,
    I just simulated the situation and got the same results as in your description. However, I did one more test - I rebuilt the two columnstore indexes after the update (and test run). I got the following details:
    Table 'Txns'. Scan count 8, logical reads 12922, physical reads 1, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Main'. Scan count 8, logical reads 57042, physical reads 1, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
    SQL Server Execution Times:
    CPU time = 251 ms, elapsed time = 128 ms.
    As an explanation of the behavior - because of the UPDATE statement in CCI is executed as a DELETE and INSERT operation, you had all original row groups of the index with almost all data deleted and almost the same amount of new row groups with new data
    (coming from the update). I suppose scanning the deleted bitmap caused the additional slowness at your end or something related with that "fragmentation". 
    Ivan Donev MCITP SQL Server 2008 DBA, DB Developer, BI Developer

  • [Solved] RAID 5 degraded after 3.13 upgrade

    Hi there,
    after upgrading my home server to the latest kernel 3.13 I've found out, that my RAID 5 got degraded. One of the drives has been kicked out, but I don't know why. The drive seems okay, I've also done a SMART short test, completed without any errors. The only suspicious looking error message, when upgrading to Linux 3.13 was:
    ERROR: Module 'hci_vhci' has devname (vhci) but lacks major and minor information. Ignoring.
    This is mdstat output:
    [tolga@Ragnarok ~]$ cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md127 : active raid5 sda1[0] sdc1[3] sdb1[1]
    5860145664 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UUU_]
    unused devices: <none>
    smartctl:
    [tolga@Ragnarok ~]$ sudo smartctl -a /dev/sdd
    smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.4-1-ARCH] (local build)
    Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
    === START OF INFORMATION SECTION ===
    Model Family: Western Digital Red (AF)
    Device Model: WDC WD20EFRX-68AX9N0
    Serial Number: [removed]
    LU WWN Device Id: 5 0014ee 2b2cd537a
    Firmware Version: 80.00A80
    User Capacity: 2,000,398,934,016 bytes [2.00 TB]
    Sector Sizes: 512 bytes logical, 4096 bytes physical
    Device is: In smartctl database [for details use: -P show]
    ATA Version is: ACS-2 (minor revision not indicated)
    SATA Version is: SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)
    Local Time is: Fri Feb 21 22:26:30 2014 CET
    SMART support is: Available - device has SMART capability.
    SMART support is: Enabled
    === START OF READ SMART DATA SECTION ===
    SMART overall-health self-assessment test result: PASSED
    General SMART Values:
    Offline data collection status: (0x00) Offline data collection activity
    was never started.
    Auto Offline Data Collection: Disabled.
    Self-test execution status: ( 0) The previous self-test routine completed
    without error or no self-test has ever
    been run.
    Total time to complete Offline
    data collection: (26580) seconds.
    Offline data collection
    capabilities: (0x7b) SMART execute Offline immediate.
    Auto Offline data collection on/off support.
    Suspend Offline collection upon new
    command.
    Offline surface scan supported.
    Self-test supported.
    Conveyance Self-test supported.
    Selective Self-test supported.
    SMART capabilities: (0x0003) Saves SMART data before entering
    power-saving mode.
    Supports SMART auto save timer.
    Error logging capability: (0x01) Error logging supported.
    General Purpose Logging supported.
    Short self-test routine
    recommended polling time: ( 2) minutes.
    Extended self-test routine
    recommended polling time: ( 268) minutes.
    Conveyance self-test routine
    recommended polling time: ( 5) minutes.
    SCT capabilities: (0x70bd) SCT Status supported.
    SCT Error Recovery Control supported.
    SCT Feature Control supported.
    SCT Data Table supported.
    SMART Attributes Data Structure revision number: 16
    Vendor Specific SMART Attributes with Thresholds:
    ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
    1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 0
    3 Spin_Up_Time 0x0027 164 163 021 Pre-fail Always - 6766
    4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 273
    5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
    7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0
    9 Power_On_Hours 0x0032 098 098 000 Old_age Always - 1954
    10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0
    11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0
    12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 273
    192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 6
    193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 266
    194 Temperature_Celsius 0x0022 115 104 000 Old_age Always - 35
    196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
    197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
    198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0
    199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0
    200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0
    SMART Error Log Version: 1
    ATA Error Count: 306 (device log contains only the most recent five errors)
    CR = Command Register [HEX]
    FR = Features Register [HEX]
    SC = Sector Count Register [HEX]
    SN = Sector Number Register [HEX]
    CL = Cylinder Low Register [HEX]
    CH = Cylinder High Register [HEX]
    DH = Device/Head Register [HEX]
    DC = Device Command Register [HEX]
    ER = Error register [HEX]
    ST = Status register [HEX]
    Powered_Up_Time is measured from power on, and printed as
    DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
    SS=sec, and sss=millisec. It "wraps" after 49.710 days.
    Error 306 occurred at disk power-on lifetime: 1706 hours (71 days + 2 hours)
    When the command that caused the error occurred, the device was active or idle.
    After command completion occurred, registers were:
    ER ST SC SN CL CH DH
    04 61 02 00 00 00 a0 Device Fault; Error: ABRT
    Commands leading to the command that caused the error were:
    CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
    ef 10 02 00 00 00 a0 08 22:17:38.065 SET FEATURES [Enable SATA feature]
    ec 00 00 00 00 00 a0 08 22:17:38.065 IDENTIFY DEVICE
    ef 03 46 00 00 00 a0 08 22:17:38.064 SET FEATURES [Set transfer mode]
    ef 10 02 00 00 00 a0 08 22:17:38.064 SET FEATURES [Enable SATA feature]
    ec 00 00 00 00 00 a0 08 22:17:38.064 IDENTIFY DEVICE
    Error 305 occurred at disk power-on lifetime: 1706 hours (71 days + 2 hours)
    When the command that caused the error occurred, the device was active or idle.
    After command completion occurred, registers were:
    ER ST SC SN CL CH DH
    04 61 46 00 00 00 a0 Device Fault; Error: ABRT
    Commands leading to the command that caused the error were:
    CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
    ef 03 46 00 00 00 a0 08 22:17:38.064 SET FEATURES [Set transfer mode]
    ef 10 02 00 00 00 a0 08 22:17:38.064 SET FEATURES [Enable SATA feature]
    ec 00 00 00 00 00 a0 08 22:17:38.064 IDENTIFY DEVICE
    ef 10 02 00 00 00 a0 08 22:17:38.063 SET FEATURES [Enable SATA feature]
    Error 304 occurred at disk power-on lifetime: 1706 hours (71 days + 2 hours)
    When the command that caused the error occurred, the device was active or idle.
    After command completion occurred, registers were:
    ER ST SC SN CL CH DH
    04 61 02 00 00 00 a0 Device Fault; Error: ABRT
    Commands leading to the command that caused the error were:
    CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
    ef 10 02 00 00 00 a0 08 22:17:38.064 SET FEATURES [Enable SATA feature]
    ec 00 00 00 00 00 a0 08 22:17:38.064 IDENTIFY DEVICE
    ef 10 02 00 00 00 a0 08 22:17:38.063 SET FEATURES [Enable SATA feature]
    ec 00 00 00 00 00 a0 08 22:17:38.063 IDENTIFY DEVICE
    Error 303 occurred at disk power-on lifetime: 1706 hours (71 days + 2 hours)
    When the command that caused the error occurred, the device was active or idle.
    After command completion occurred, registers were:
    ER ST SC SN CL CH DH
    04 61 02 00 00 00 a0 Device Fault; Error: ABRT
    Commands leading to the command that caused the error were:
    CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
    ef 10 02 00 00 00 a0 08 22:17:38.063 SET FEATURES [Enable SATA feature]
    ec 00 00 00 00 00 a0 08 22:17:38.063 IDENTIFY DEVICE
    ef 03 46 00 00 00 a0 08 22:17:38.063 SET FEATURES [Set transfer mode]
    ef 10 02 00 00 00 a0 08 22:17:38.063 SET FEATURES [Enable SATA feature]
    ec 00 00 00 00 00 a0 08 22:17:38.062 IDENTIFY DEVICE
    Error 302 occurred at disk power-on lifetime: 1706 hours (71 days + 2 hours)
    When the command that caused the error occurred, the device was active or idle.
    After command completion occurred, registers were:
    ER ST SC SN CL CH DH
    04 61 46 00 00 00 a0 Device Fault; Error: ABRT
    Commands leading to the command that caused the error were:
    CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
    ef 03 46 00 00 00 a0 08 22:17:38.063 SET FEATURES [Set transfer mode]
    ef 10 02 00 00 00 a0 08 22:17:38.063 SET FEATURES [Enable SATA feature]
    ec 00 00 00 00 00 a0 08 22:17:38.062 IDENTIFY DEVICE
    ef 10 02 00 00 00 a0 08 22:17:38.062 SET FEATURES [Enable SATA feature]
    SMART Self-test log structure revision number 1
    Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
    # 1 Short offline Completed without error 00% 1954 -
    # 2 Short offline Completed without error 00% 0 -
    # 3 Conveyance offline Completed without error 00% 0 -
    SMART Selective self-test log data structure revision number 1
    SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
    1 0 0 Not_testing
    2 0 0 Not_testing
    3 0 0 Not_testing
    4 0 0 Not_testing
    5 0 0 Not_testing
    Selective self-test flags (0x0):
    After scanning selected spans, do NOT read-scan remainder of disk.
    If Selective self-test is pending on power-up, resume after 0 minute delay.
    This is my mdadm configuration:
    [tolga@Ragnarok ~]$ cat /etc/mdadm.conf
    ARRAY /dev/md/Asura metadata=1.2 UUID=34bab60a:4d640b50:6228c429:0679bb34 name=Ragnarok:Asura
    I've checked all partition tables, everything seems ok. "Error 30[x] occurred at disk power-on lifetime: 1706 hours (71 days + 2 hours)" seems to be a one-time event, which happened on 1706 hours (I don't know why; no power loss or something similar). Other than those smartctl errors, everything seems fine. I've also inspected the drive; no suspicious noises or anything else, works like the other 3 drives. Am I safe to simply re-add the drive using "sudo mdadm --manage --re-add /dev/md127 /dev/sdd1" and let it re-sync or should I flag it as failed and then re-add it to the RAID?
    I am using 4x 2TB Western Digital Red drives in a RAID 5, which are about 1 year old and they ran perfectly fine until now. The server is currently shut down until this problem is fixed. I currently got a partial backup of my data (most important ones) and will make a full backup, before attempting a repair. At the moment, I'm still able to access all my data, so nothing's wrong there.
    So, what do you guys think, what should I do?
    Last edited by tolga9009 (2014-09-13 12:48:13)

    Thank you brian for the fast reply. I've backed up all my important data and tried the command. It's not working ...
    [tolga@Ragnarok ~]$ sudo mdadm --manage --re-add /dev/md127 /dev/sdd1
    mdadm: --re-add for /dev/sdd1 to /dev/md127 is not possible
    [tolga@Ragnarok ~]$ lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda 8:0 0 1.8T 0 disk
    ââsda1 8:1 0 1.8T 0 part
    ââmd127 9:127 0 5.5T 0 raid5 /media/Asura
    sdb 8:16 0 1.8T 0 disk
    ââsdb1 8:17 0 1.8T 0 part
    ââmd127 9:127 0 5.5T 0 raid5 /media/Asura
    sdc 8:32 0 1.8T 0 disk
    ââsdc1 8:33 0 1.8T 0 part
    ââmd127 9:127 0 5.5T 0 raid5 /media/Asura
    sdd 8:48 0 1.8T 0 disk
    ââsdd1 8:49 0 1.8T 0 part
    sde 8:64 0 59.6G 0 disk
    ââsde1 8:65 0 512M 0 part /boot/efi
    ââsde2 8:66 0 4G 0 part [SWAP]
    ââsde3 8:67 0 54.6G 0 part /
    ââsde4 8:68 0 512M 0 part /boot
    Out of curiosity, I've compared "mdadm -E" of the corrupted and a healthy drive. Here's the output:
    [tolga@Ragnarok ~]$ diff -u sdc sdd
    --- sdc 2014-02-21 23:28:51.051674496 +0100
    +++ sdd 2014-02-21 23:28:55.911816816 +0100
    @@ -1,4 +1,4 @@
    -/dev/sdc1:
    +/dev/sdd1:
    Magic : a92b4efc
    Version : 1.2
    Feature Map : 0x0
    @@ -14,15 +14,15 @@
    Data Offset : 262144 sectors
    Super Offset : 8 sectors
    Unused Space : before=262064 sectors, after=1167 sectors
    - State : clean
    - Device UUID : 4ce2ba99:645b1cc6:60c23336:c4428e2f
    + State : active
    + Device UUID : 4aeef598:64ff6631:826f445e:dbf77ab5
    - Update Time : Fri Feb 21 23:18:20 2014
    - Checksum : a6c42392 - correct
    - Events : 16736
    + Update Time : Sun Jan 12 06:40:56 2014
    + Checksum : bf106b2a - correct
    + Events : 7295
    Layout : left-symmetric
    Chunk Size : 512K
    - Device Role : Active device 2
    - Array State : AAA. ('A' == active, '.' == missing, 'R' == replacing)
    + Device Role : Active device 3
    + Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
    So, I guess my only way to fix this is remove the faulty drive from the RAID, zero out the superblock and then re-add it as a new drive. Or is there any other way to fix this?
    //Edit: I've used "mdadm --detail /dev/md127" and found out, that the faulty drive wasn't even listed anymore. So instead of using "re-add", I simply added it as a new drive and it's resyncing now. In about 220mins, I'll know more ! Is there a way to check for corruption after syncing the drives?
    //Edit: ^ this worked. My drive probably didn't got kicked after the 3.13 upgrade, but I've simply noticed it then. The drive seems to be kicked after ~1700 hours for some unknown reason - I've now disconnected and reconnected all drives to opt out any wiring issues. Since the drive was out of sync, simply re-adding it didn't work. I had to manually add it to the array again and this caused a resync, which took around 3,5 hours. I think that's okay for a 4x 2TB RAID 5 array. Everything is working fine again, no data corruption, nothing. I'll mark it as solved.
    Last edited by tolga9009 (2014-09-13 12:59:22)

  • RAID degraded - mirrored striped volumes - how to see if mirroring is working

    I've set up a mirrored raid drive. It keeps showing it as 'degraded', even though I've tested each disk separately and they come up OK.
    What does it mean in this report by 'rebuilding'?
    How do I sort out this 'degraded' status?
    How can I tell if mirroring is working correctly?
    The set up is:
    ===============================================================================
    Name:                 Saturn
    Unique ID:            CF319F64-987B-42FC-8C14-751766B37A49
    Type:                 Mirror
    Status:               Degraded
    Size:                 8.0 TB (8000084869120 Bytes)
    Rebuild:              manual
    Device Node:          disk15
    #  DevNode   UUID                                  Status     Size
    0  -none-    384CF206-BCD5-4804-BDB8-FF1C956EEF64  Online     8000084869120
    1  -none-    F886018B-EEE1-4875-853E-BCD4298683F8  0% (Rebuilding)8000084869120
    ===============================================================================
    Name:                 RAID0.1
    Unique ID:            384CF206-BCD5-4804-BDB8-FF1C956EEF64
    Type:                 Stripe
    Status:               Online
    Size:                 8.0 TB (8000219643904 Bytes)
    Rebuild:              manual
    Device Node:          -
    #  DevNode   UUID                                  Status     Size
    0  disk14s2  78CEBE17-8AFA-4849-A5B2-B73D9906FFE2  Online     2000054910976
    1  disk10s2  5D06DB08-6A3E-4041-A3F8-7E195D5B80DD  Online     2000054910976
    2  disk9s2   E430EC4F-AE2C-4B78-B2CC-04ED88315D3A  Online     2000054910976
    3  disk8s2   46EED2A6-BA53-4D54-8B69-FF5D650B97A0  Online     2000054910976
    ===============================================================================
    Name:                 RAID0.0
    Unique ID:            F886018B-EEE1-4875-853E-BCD4298683F8
    Type:                 Stripe
    Status:               Online
    Size:                 8.0 TB (8000084901888 Bytes)
    Rebuild:              manual
    Device Node:          -
    #  DevNode   UUID                                  Status     Size
    0  disk16s2  0B5223E9-2750-493B-A08E-01DD30E65065  Online     2000021225472
    1  disk5s2   F473AEC5-34A0-444E-AE62-DE755ECCE8A5  Online     2000021225472
    2  disk13s2  BDCBFE64-5771-4F3A-AECA-959B20844CD6  Online     2000021225472
    3  disk11s2  63AF3296-C427-4805-9FB5-B496205F49E8  Online     2000021225472
    ===============================================================================

    Hi,
    As I known, RAID1, or mirroring, is the technique of writing the same data to more than one disk drive. Mirrors are usually used to guard against data loss due to drive failure. Each drive in a mirror contains
    an identical copy of the data. No need to compare.
    If the drive is bootable, You should have got a warning when you booted the machine saying that either drive 0 or drive 1 was corrupt/non-bootable/missing and then be given a choice to boot from the second drive.
    Kate Li
    TechNet Community Support

  • 6.01 Degraded Quality Of Files Compared To Adobe Reader

    I have a wide format scanner, an HP Designjet 4200(815mfp), that can save scans in .pdf format. When I click on the properties tab of one of these .pdf's, this is the info: Application: CTX PDF Producer: PDFlib 4.0.3(Win32) PDF Version: 1.3. I am using Photoshop 6.01(6.0 with patch installed, provided by Adobe as ps601up.exe) running under Windows 2000.
    When I open one of these .pdf files with Photoshop a message appears at the bottom of the screen while the file loads, "rasterizing file" as the file loads. The image that then appears on the pc's monitor is greatly degraded from the scanned image, lines and text are jagged and blurry; and even if I make no edits whatsoever and print it immediately from Photoshop the quality of the printed image is horrible, as if the resolution has vastly declined. If I open the same .pdf file with Reader, the image appears in the high quality that it ought to, and Reader prints it in high quality as well. I am definitely in Photoshop not Imageready when this happens, and it is not affected by any change I make to the resolution in the "Rasterize Generic PDF Format" box that appears whenever I first open one of these files.
    Any help will be greatly appreciated, as the degraded quality of these images presented by Photoshop literally makes them unusable.

    I am replying to Mr. McCahill's & Mr. Levine's posts as one, since they address similar issues. I am constrained to use Windows 2000, as that is the system used by our LAN. So newer versions of Photoshop are not an option. The computer I'm using is a 2.80 GHz Pentium 4 with over 1 gigabyte of RAM. The fixed points of my problems are the computer, operating system, and scanner(along with its software, which dictates the type of .pdf file it can generate; it can also save scans as .tif files or .cal files; for reasons that would be much too lengthy & off-topic here, .jpg is not an option even though it can save as those as well). I'm limited to software solutions, and I
    don't think this PC is really a big contributor to any of my woes.

  • Comparing iMovieHD vs. iMovie08

    I loaded iMovieHD today and noticed that encodings are so much more faster with HD than 08. So I started trying to figure out why. I noticed that a 2 minute clip imported is HUGE in the project where as in 08 it is about actual size(regardless of importing from camera or card). This HD project was over a 1gb in size.
    I ended up creating the same size 720P AIC movie file in each version. It took 4 minutes in HD vs 16-18 in '08. The file output sizes was 538mb(HD) to 747mb('08). I compared by viewing in Quicktime at the same timecode. I can tell considerable differences where the larger 747mb('08) was sharper and more vivid. I attribute this to more databits in the file.
    The source file was 4 clips from a Sanyo HD camera captured a 1920x1080 at 30P. The import was close to 8 minutes in HD and almost 4 in '08.
    My question is, short of the editing functions that HD provides does the HD version compare with 08 in quality? I guess I am a little nitpicky about this even though HD seems so much faster. Maybe it is personal preference but I thought I would ask others what they thought about the two.
    Thanks in advance.
    --Mickey

    I'm only guessing but in your particular case the difference may come from how each app treat 'still camera movies'.
    I'm assuming Sanyo's HD clips are from Xacti HD1000, and although it is more like a camcorder than a still cam it does not fall into traditional camcorder category. Camcorders usually generate certain closed file types - DV, HDV, AVCHD and iMovie 08 either import them natively (DV) or convert to AIC movies (HDV,AVCHD). But when it comes to h264 or mpeg4 movies out of other cameras iPhoto store them as still cam movie and iMovie does not perform any conversion on them. Sanyo's h264 mp4 files are still considered this 'still cam movie' even at 1920x1080 res, and iMovie08 has difficulty performing in all realtime.
    iMovieHD, on the other hand, converts everything to work with the project type. It does not support multi format / multi resolution mix up like iMovie08, and if you choose 1080i or 720p project setting it converts all source movies to AIC codec unless your source movie happens to match the target format. Thus file size becomes much larger but lighter on CPU to perform editing function.
    As for 720p export, the file size difference is probably from the export setting if both movies are identical in length. Perhaps iMovie 08 uses a bit higher bitrate. Better quality attributes to higher bitrate, and also to the fact that iMovie08 did only one conversion (h264 -> 720p AIC) where as iMovieHD did it twice (h264->1080i AIC -> 720p), thus more generation loss in quality.
    Personally I think iMovie should treat HD res h264 like the ones out of camcorder and convert them to AIC to maintain realtime operation, which is why it converts AVCHD - another HD res h264 movies - to AIC.

  • Why does my type look bitmapped (jaggies)

    Why does my title type look bitmapped (jaggies)? It's fine in iMovie but looks crappy once I burn the DVD. The max. resolution is 720 x 540.

    Hi
    There are at least two levels on this Q:
    • iMovie'08 to 11 can not deliver Interlaced SD-Video over to iDVD but discard every second line resulting in a quality loss. I use iMovie HD6 or FinalCut
    • The way one goes from iM'08 to 11 to iDVD matters to a GREAT degree. I never use in any version of iMovie "Share to iDVD" as this set's off iMovie rendering function - and it's bad. I do.
    Share to Media Browser - and as Large - NOT HD or other resolution as this too degrades the out-come.
    Yours Bengt W

Maybe you are looking for