Finally - part II.

To daFei,
You have been doing programming for so many years, I hope you must have heard of the techniques like 'strong cohesion' and 'loose coupling'. If you haven't, I think you better go back to undergraduate school and start all over.
Strong cohesion basically means that you should put the operations that are closely related into the same block of code or routine.
Guaranteed execution is not the only one benefit of 'finally'. Writing cleanup codes in the finally block enables other developers to understand your code immediately. They will know that everything in the 'finally' is related to your try/catch. Not only that, it will also make your life easier because whenever you want to change the way you do the cleanup in the future, you only need to deal with the code in the 'finally' block.
Now, you are putting the cleanup codes after your general catch. I would say that it WILL work, because there are always ways to get around things, but you will end up with lots of maintenance cost because you are not using this proven good programming practice.
Well, this is my argument for using finally. Please post your own thoughts.

That was a pretty good explanation, and i'm not sure i can do much better. All i'm gonna do is throw in my $.02 on good programming practices. I've seen a huge increase in people whose primary goal is that their code 'works'. There's a lot to be said for readability, logic, and the understanding that shorter code is not necessarily better. Architecture of an application is important, but equally as important is the flow of your code within a single class. So, apply that to what thunderBolt previously said, and you'll have my opinion on this whole issue.

Similar Messages

  • I am trying to download the iTunes 10.7 update so that i can update my ipod and just before the final part of the download starts the program stops and says, 'The installer enountered problems before iTunes could be configured'    What a i doing wrong?!

    I am trying to download the iTunes 10.7 so that i can update my ipod. Just before the final part f the download starts the program stops and says, 'The installer encountered problems before iTunes could be configured'
    What am I doing wrong?!

    I am trying to download the iTunes 10.7 so that i can update my ipod. Just before the final part f the download starts the program stops and says, 'The installer encountered problems before iTunes could be configured'
    What am I doing wrong?!

  • HT4623 When I was updating my iphone to the new iOS at the final part (when the syncronization is beind done in iTunes), it never finshed. It's been more than 1 hour and it says "syncronizing step 2 of 4". What to do in this case?

    When I was updating my iphone to the new iOS at the final part (when the syncronization is beind done in iTunes), it never finshed. It's been more than 1 hour and it says "syncronizing step 2 of 4". What to do in this case?

    Hi lucaloo,
    Welcome to the Support Communities!
    The article below may be able to help you with this.
    If you can't update or restore your iOS device
    http://support.apple.com/kb/ht1808
    Cheers,
    - Judy

  • Just got NEW Apple TV, The status light went out during final part of setup and it no longer works

    Just got NEW Apple TV, The status light went out during final part of setup and it no longer works.  Any ideas?

    If your problem persists get yourself a micro USB cable (sold separately), you can restore your Apple TV from iTunes:
    Remove ALL cables from Apple TV. (if you don't you will not see Apple TV in the iTunes Source list)
    Connect the micro USB cable to the Apple TV and to your computer.
    Reconnect the power cable (only for Apple TV 3)
    Open iTunes.
    Select your Apple TV in the Devices list, and then click Restore.

  • When I am turning my iphone off, while sliding it makes white little square in the final part of sliding. Is this a bug or only I have this problem?

    When I am turning my iphone off, while sliding it makes white little square in the final part of sliding. Is this a bug or only I have this problem?

    Please look over the System Requirements for Lion:
    Mac OS X Lion System Requirements
    In order to install Mac OS X 10.7 you will need:
    Intel Core 2 Duo, Core i3, Core i5, Core i7, or Xeon processor
    2GB of RAM (4GB recommended)
    Mac OS X 10.6.6 or later with the Mac App Store installed( 10.6.8 Recommended)
    At least 4GB of additional disk space to accommodate the download, but more is obviously recommended

  • Garageband didnt install in my iphone 4s! and in final part of installation give a error that iphone cant install this app! Plz help. tnx

    I need a little help!

    Now with 7.0.2 out heres the status.
    - iTunes says there is no update available and that 7.0 is the most up to date version (which is not).
    - If I click restore instead of update in iTunes, it again gives me an error saying that there was an error downloading the software.
    - If I force it by putting the device in recovery mode then It doesnt fail to download the software but it one more time tries to download version 6.1.3 and if I go ahead and try to install that, it says the iPhone is ineligible.
    - If I try to update the iphone from within iOS it fails as well.
    Help me please, don't know what else to try.

  • How to extend final part of livetype

    I'll try to explain a bit better than the title...
    If I make a sequence which for example uses livefont clay, thesequence renders the word typed just fine but how to get the sequence to extend so that the tpye word remains on screen for longer, by default it old shows visable for about a second before the sequence ends. As it is you only get a second to view the finished effect.
    Thank

    Here's how to hold the last frame of a LiveType animation, be it a LiveFont, Object or Texture:
    With the track that has the LiveFont on it selected, go to the inspector and select the Timing tab. In there, change the Hold Last value to the length of time you need to make the LiveFont stay on the screen. You can either use Frm (frames) or Sec (Seconds) by using the little control to the right of the Hold Last slider.
    Bony
    Dual G5 2.7   Mac OS X (10.4.4)  

  • Introduction to regular expressions ... last part.

    Continued from Introduction to regular expressions ... continued., here's the third and final part of my introduction to regular expressions. As always, if you find mistakes or have examples that you think could be solved through regular expressions, please post them.
    Having fun with regular expressions - Part 3
    In some cases, I may have to search for different values in the same column. If the searched values are fixed, I can use the logical OR operator or the IN clause, like in this example (using my brute force data generator from part 2):
    SELECT data
      FROM TABLE(regex_utils.gen_data('abcxyz012', 4))
    WHERE data IN ('abc', 'xyz', '012');There are of course some workarounds as presented in this asktom thread but for a quick solution, there's of course an alternative approach available. Remember the "|" pipe symbol as OR operator inside regular expressions? Take a look at this:
    SELECT data
      FROM TABLE(regex_utils.gen_data('abcxyz012', 4))
    WHERE REGEXP_LIKE(data, '^(abc|xyz|012)$')
    ;I can even use strings composed of values like 'abc, xyz ,  012' by simply using another regular expression to replace "," and spaces with the "|" pipe symbol. After reading part 1 and 2 that shouldn't be too hard, right? Here's my "thinking in regular expression": Replace every "," and 0 or more leading/trailing spaces.
    Ready to try your own solution?
    Does it look like this?
    SELECT data
      FROM TABLE(regex_utils.gen_data('abcxyz012', 4))
    WHERE REGEXP_LIKE(data, '^(' || REGEXP_REPLACE('abc, xyz ,  012', ' *, *', '|') || ')$')
    ;If I wouldn't use the "^" and "$" metacharacter, this SELECT would search for any occurence inside the data column, which could be useful if I wanted to combine LIKE and IN clause. Take a look at this example where I'm looking for 'abc%', 'xyz%' or '012%' and adding a case insensitive match parameter to it:
    SELECT data
      FROM TABLE(regex_utils.gen_data('abcxyz012', 4))
    WHERE REGEXP_LIKE(data, '^(abc|xyz|012)', 'i')
    ; An equivalent non regular expression solution would have to look like this, not mentioning other options with adding an extra "," and using the INSTR function:
    SELECT data
      FROM (SELECT data, LOWER(DATA) search
              FROM TABLE(regex_utils.gen_data('abcxyz012', 4))
    WHERE search LIKE 'abc%'
        OR search LIKE 'xyz%'
        OR search LIKE '012%'
    SELECT data
      FROM (SELECT data, SUBSTR(LOWER(DATA), 1, 3) search
              FROM TABLE(regex_utils.gen_data('abcxyz012', 4))
    WHERE search IN ('abc', 'xyz', '012')
    ;  I'll leave it to your imagination how a complete non regular example with 'abc, xyz ,  012' as search condition would look like.
    As mentioned in the first part, regular expressions are not very good at formatting, except for some selected examples, such as phone numbers, which in my demonstration, have different formats. Using regular expressions, I can change them to a uniform representation:
    WITH t AS (SELECT '123-4567' phone
                 FROM dual
                UNION
               SELECT '01 345678'
                 FROM dual
                UNION
               SELECT '7 87 8787'
                 FROM dual
    SELECT t.phone, REGEXP_REPLACE(REGEXP_REPLACE(phone, '[^0-9]'), '(.{3})(.*)', '(\1)-\2')
      FROM t
    ;First, all non digit characters are beeing filtered, afterwards the remaining string is put into a "(xxx)-xxxx" format, but not cutting off any phone numbers that have more than 7 digits. Using such a conversion could also be used to check the validity of entered data, and updating the value with a uniform format afterwards.
    Thinking about it, why not use regular expressions to check other values about their formats? How about an IP4 address? I'll do this step by step, using 127.0.0.1 as the final test case.
    First I want to make sure, that each of the 4 parts of an IP address remains in the range between 0-255. Regular expressions are good at string matching but they don't allow any numeric comparisons. What valid strings do I have to take into consideration?
    Single digit values: 0-9
    Double digit values: 00-99
    Triple digit values: 000-199, 200-255 (this one will be the trickiest part)
    So far, I will have to use the "|" pipe operator to match all of the allowed combinations. I'll use my brute force generator to check if my solution works for a single value:
    SELECT data
      FROM TABLE(regex_utils.gen_data('0123456789', 3))
    WHERE REGEXP_LIKE(data, '^(25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})$') 
    ; More than 255 records? Leading zeros are allowed, but checking on all the records, there's no value above 255. First step accomplished. The second part is to make sure, that there are 4 such values, delimited by a "." dot. So I have to check for 0-255 plus a dot 3 times and then check for another 0-255 value. Doesn't sound to complicated, does it?
    Using first my brute force generator, I'll check if I've missed any possible combination:
    SELECT data
      FROM TABLE(regex_utils.gen_data('03.', 15))
    WHERE REGEXP_LIKE(data,
                       '^((25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})$'
    ;  Looks good to me. Let's check on some sample data:
    WITH t AS (SELECT '127.0.0.1' ip
                 FROM dual
                UNION 
               SELECT '256.128.64.32'
                 FROM dual            
    SELECT t.ip
      FROM t WHERE REGEXP_LIKE(t.ip,
                       '^((25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})$'
    ;  No surprises here. I can take this example a bit further and try to format valid addresses to a uniform representation, as shown in the phone number example. My goal is to display every ip address in the "xxx.xxx.xxx.xxx" format, using leading zeros for 2 and 1 digit values.
    Regular expressions don't have any format models like for example the TO_CHAR function, so how could this be achieved? Thinking in regular expressions, I first have to find a way to make sure, that each single number is at least three digits wide. Using my example, this could look like this:
    WITH t AS (SELECT '127.0.0.1' ip
                 FROM dual
    SELECT t.ip, REGEXP_REPLACE(t.ip, '([0-9]+)(\.?)', '00\1\2')
      FROM t
    ;  Look at this: leading zeros. However, that first value "00127" doesn't look to good, does it? If you thought about using a second regular expression function to remove any excess zeros, you're absolutely right. Just take the past examples and think in regular expressions. Did you come up with something like this?
    WITH t AS (SELECT '127.0.0.1' ip
                 FROM dual
    SELECT t.ip, REGEXP_REPLACE(REGEXP_REPLACE(t.ip, '([0-9]+)(\.?)', '00\1\2'),
                                '[0-9]*([0-9]{3})(\.?)', '\1\2'
      FROM t
    ;  Think about the possibilities: Now you can sort a table with unformatted IP addresses, if that is a requirement in your application or you find other values where you can use that "trick".
    Since I'm on checking INET (internet) type of values, let's do some more, for example an e-mail address. I'll keep it simple and will only check on the
    "[email protected]", "[email protected]" and "[email protected]" format, where x represents an alphanumeric character. If you want, you can look up the corresponding RFC definition and try to build your own regular expression for that one.
    Now back to this one: At least one alphanumeric character followed by an "@" at sign which is followed by at least one alphanumeric character followed by a "." dot and exactly 3 more alphanumeric characters or 2 more characters followed by a "." dot and another 2 characters. This should be an easy one, right? Use some sample e-mail addresses and my brute force generator, you should be able to verify your solution.
    Here's mine:
    SELECT data
      FROM TABLE(regex_utils.gen_data('a1@.', 9))
    WHERE REGEXP_LIKE(data, '^[[:alnum:]]+@[[:alnum:]]+(\.[[:alnum:]]{3,4}|(\.[[:alnum:]]{2}){2})$', 'i'); Checking on valid domains, in my opinion, should be done in a second function, to keep the checks by itself simple, but that's probably a discussion about readability and taste.
    How about checking a valid URL? I can reuse some parts of the e-mail example and only have to decide what type of URLs I want, for example "http://", "https://" and "ftp://", any subdomain and a "/" after the domain. Using the case insensitive match parameter, this shouldn't take too long, and I can use this thread's URL as a test value. But take a minute to figure that one out for yourself.
    Does it look like this?
    WITH t AS (SELECT 'Introduction to regular expressions ... last part. URL
                 FROM dual
                UNION
               SELECT 'http://x/'
                 FROM dual
    SELECT t.URL
      FROM t
    WHERE REGEXP_LIKE(t.URL, '^(https*|ftp)://(.+\.)*[[:alnum:]]+(\.[[:alnum:]]{3,4}|(\.[[:alnum:]]{2}){2})/', 'i')
    Update: Improvements in 10g2
    All of you, who are using 10g2 or XE (which includes some of 10g2 features) may want to take a look at several improvements in this version. First of all, there are new, perl influenced meta characters.
    Rewriting my example from the first lesson, the WHERE clause would look like this:
    WHERE NOT REGEXP_LIKE(t.col1, '^\d+$')Or my example with searching decimal numbers:
    '^(\.\d+|\d+(\.\d*)?)$'Saves some space, doesn't it? However, this will only work in 10g2 and future releases.
    Some of those meta characters even include non matching lists, for example "\S" is equivalent to "[^ ]", so my example in the second part could be changed to:
    SELECT NVL(LENGTH(REGEXP_REPLACE('Having fun with regular expressions', '\S')), 0)
      FROM dual
      ;Other meta characters support search patterns in strings with newline characters. Just take a look at the link I've included.
    Another interesting meta character is "?" non-greedy. In 10g2, "?" not only means 0 or 1 occurrence, it means also the first occurrence. Let me illustrate with a simple example:
    SELECT REGEXP_SUBSTR('Having fun with regular expressions', '^.* +')
      FROM dual
      ;This is old style, "greedy" search pattern, returning everything until the last space.
    SELECT REGEXP_SUBSTR('Having fun with regular expressions', '^.* +?')
      FROM dual
      ;In 10g2, you'd get only "Having " because of the non-greedy search operation. Simulating that behavior in 10g1, I'd have to change the pattern to this:
    SELECT REGEXP_SUBSTR('Having fun with regular expressions', '^[^ ]+ +')
      FROM dual
      ;Another new option is the "x" match parameter. It's purpose is to ignore whitespaces in the searched string. This would prove useful in ignoring trailing/leading spaces for example. Checking on unsigned integers with leading/trailing spaces would look like this:
    SELECT REGEXP_SUBSTR(' 123 ', '^[0-9]+$', 1, 1, 'x')
      FROM dual
      ;However, I've to be careful. "x" would also allow " 1 2 3 " to qualify as valid string.
    I hope you enjoyed reading this introduction and hope you'll have some fun with using regular expressions.
    C.
    Fixed some typos ...
    Message was edited by:
    cd
    Included 10g2 features
    Message was edited by:
    cd

    Can I write this condition with only one reg expr in Oracle (regexp_substr in my example)?I meant to use only regexp_substr in select clause and without regexp_like in where clause.
    but for better understanding what I'd like to get
    next example:
    a have strings of two blocks separated by space.
    in the first block 5 symbols of [01] in the second block 3 symbols of [01].
    In the first block it is optional to meet one (!), in the second block it is optional to meet one (>).
    The idea is to find such strings with only one reg expr using regexp_substr in the select clause, so if the string does not satisfy requirments should be passed out null in the result set.
    with t as (select '10(!)010 10(>)1' num from dual union all
    select '1112(!)0 111' from dual union all --incorrect because of '2'
    select '(!)10010 011' from dual union all
    select '10010(!) 101' from dual union all
    select '10010 100(>)' from dual union all
    select '13001 110' from dual union all -- incorrect because of '3'
    select '100!01 100' from dual union all --incorrect because of ! without (!)
    select '100(!)1(!)1 101' from dual union all -- incorrect because of two occurencies of (!)
    select '1001(!)10 101' from dual union all --incorrect because of length of block1=6
    select '1001(!)10 1011' from dual union all) --incorrect because of length of block2=4
    select '10110 1(>)11(>)0' from dual union all)--incorrect because of two occurencies of (>)
    select '1001(>)1 11(!)0' from dual)--incorrect because (!) and (>) are met not in their blocks
    --end of test data

  • Oracle Certification Exam Design (Part 3) - OCM Exams

    In this third and final part of our "Exam Design" series, Joel shares about how our Oracle Certified Master (OCM) certification exams are designed and developed.
    h4. Oracle Certification Exam Design (Part 3) - OCM Exams
    !http://blogs.oracle.com/certification/0096B.jpg!
    [Watch video|http://blogs.oracle.com/certification/2009/08/0109.html] (6:49)

    mediaguy wrote:
    In this interview, we talk with Harald van Breederode - Oracle Certified Master (OCM) and instructor with Oracle University in The Netherlands. Harald is part of the Oracle Certification exam development team and has also co-authored several popular booklets with Joel Goodman on DBA skillsets. http://bit.ly/cQ0hRI
    Thanks for sharing!

  • Ignored exception in try with finally

    Hello,
    I do not understand why the following code (more precisely the line marked with //**) compiles well. It seems to break the catch or throws rule of the Java exceptions. Method3 throws Exception, but it is not necessary either to surround method3 call in a try-catch block or to add a throws Exception clause in method1.
    Can anybody explain me why this code compiles well?
    public class TestCase {
      public static void main(String[] args) {
        method1();
      private static boolean method1() {
        try {
          method2();
        } catch (Exception e) {
          method3(); // **
        } finally {
          // If I place here the return
          // code compiles perfectly, even without
          // surrounding the ** line with a try-catch
          return true;
        // But if the return is placed here, code does not compile
    //    return true;
      private static void method2() throws Exception {
        System.out.println("Method2");
        throw new Exception();
      private static void method3() throws Exception {
        System.out.println("Method3");
        throw new Exception();
    }Thank you in advance.

    As you observe, if you take the "return true" out of the finally block and put it at the end of the method the code will not compile. In this case method2() might throw an Exception sending you into the catch bit. Then method3() might throw an Exception. At this point the try statement as a whole - the try, catch and now empty finally parts - will have thrown an Exception and the compiler demands you declare this with throws.
    Now the code you posted is deceptively similar, but quite different in effect. Again method2() might result in an Exception and so might method3(). But neither of these facts counts for much: the finally block will always be executed and it will always return true. Game over! So method1() always returns true and never anything else and, in particular, never throws an Exception. The compiler knows this and compiles your code.
    It is true that exceptions must be caught or thrown. The point is that the try statement as a whole does not (and cannot) throw an exception, so the rule never comes into play.
    Much the same happens if your finally bit throws some other exception. The exception (or return) within the finally part is garanteed to occur and will take precedence over any other exception or return that occurs before.
    [Edit] block->statement in line with the following post

  • Related with Final Keyword...

    Hi,
    I written the following code to iterate over an array :
    for(final int i:arr)
    System.out.println(i);
    }

    jschell wrote:
    I really doubt that the compiler doesn't erase the final part.
    It is a compile time rather than run time check.Runtime as well, it seems.
    public class Final {
      public static final int i = 999;
    public class FinalChanger {
      public static void main(String[] args) {
        Final.i = 123;
        System.out.println(Final.i);
    }1) Compile both without the final keyword in Final.java
    2) Put final into Final.java, and recompile.
    3) Run javac -cp . FinalChanger
    Exception in thread "main" java.lang.IllegalAccessError
            at FinalChanger.main(FinalChanger.java:3)
    :; javap -s -c -verbose -classpath . Final
    Compiled from "Final.java"
    public class Final extends java.lang.Object
      SourceFile: "Final.java"
      minor version: 0
      major version: 50
      Constant pool:
    const #1 = Method       #3.#14; //  java/lang/Object."<init>":()V
    const #2 = class        #15;    //  Final
    const #3 = class        #16;    //  java/lang/Object
    const #4 = Asciz        i;
    const #5 = Asciz        I;
    const #6 = Asciz        ConstantValue;
    const #7 = int  999;
    const #8 = Asciz        <init>;
    const #9 = Asciz        ()V;
    const #10 = Asciz       Code;
    const #11 = Asciz       LineNumberTable;
    const #12 = Asciz       SourceFile;
    const #13 = Asciz       Final.java;
    const #14 = NameAndType #8:#9;//  "<init>":()V
    const #15 = Asciz       Final;
    const #16 = Asciz       java/lang/Object;
    public static final int i;
      Signature: I
      Constant value: int 999
    public Final();
      Signature: ()V
      Code:
       Stack=1, Locals=1, Args_size=1
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   return
      LineNumberTable:
       line 1: 0
    :; javac -version
    javac 1.6.0_06
    :; java -version
    java version "1.6.0_06"
    Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
    Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode)

  • Sharing an iTunes Library across multiple user account and a network.

    Sharing an iTunes Music Library across multiple user accounts.
    Hello Everybody!
    Firstly, this was designed to be run in Mac OS X 10.4 Tiger. It will not work with earlier versions of Mac OS X! Sorry.
    Here's a handy tip for keeping your hard drive neat and tidy, it also saves space, what in effect will be done is an iTunes music library will be shared amongst multiple users on the same machine. There are advantages and disadvantages to using this method.
    • Firstly I think it might be worthwhile to state the advantages and disadvantages to using this approach.
    The advantages include:
    - Space will be saved, as no duplicate files will occur.
    - The administrator will be able to have complete control over the content of the iTunes library, this may be useful for restricting the content of the Library; particularly for example if computer is being used at and education institution, business or any other sort of institution where things such as explicit content would be less favorable.
    - The machine will not be slowed by the fact that every user has lots of files.
    The disadvantages to this system include.
    - The fact that the account storing the music will have to be logged in, and iTunes will have to be active in that account.
    - If the account housing the music is not active then nobody can use the iTunes library.
    - There is a certain degree of risk present when an administrator account must be continually active.
    - Fast User Switching must be enabled.
    Overview:
    A central account controls all music on the machine/network, this is achieved by storing iTunes files in a public location as opposed to in the user's directory. In effect the system will give all users across the machine/network access to the same music/files without the possibility of files 'doubling up' because two different users like the same types of music. This approach saves valuable disk space in this regard and may therefore prove to be useful in some situations.
    This is a hearty process to undertake, so only follow this tutorial if you're willing to go all the way to the end of it.
    Process:
    Step 1:
    Firstly, we need to organize the host library, I tidied mine up, removing excess playlists, random files, things like that. this will make thing a bit easier in the later stages of this process.
    Once the library is tidied up, move the entire "iTunes" folder from your Home directory to the "//localhost" directory (The Macintosh HD) and ensure that files are on the same level as the "Applications", "Users", "Library" and "System" directories; this will ensure that the files in the library are available to all users on the machine (this also works for networks)
    Optionally you can set the ownership of the folder to the 'administrator' account (the user who will be hosting the library.), you may also like to set the permissions of 'you can' to "Read & Write" (assuming that you are doing this through the user who will host the library); secondly you should set the "Owner" to the administrator who will be hosting the library and set their "access" to "Read & Write" (this will ensure that the administrator has full access to the folder). The final part of this step involves setting access for the "Others" tab to "Read Only" this will ensure that the other users can view but not modify the contents on the folder.
    Overview:
    So far we have done the following steps:
    1. Organized the host library.
    2. Placed the iTunes directory into a 'public' directory so that other users may use it. (this step is essential if you plan on sharing the library across multiple accounts on the same machine. NOTE: this step is only necessary if you are wanting to share you library across multiple accounts on the same machine, if you simply want to share the music across a network, use the iTunes sharing facility.
    3. set ownership and permissions for the iTunes music folder.
    Step 2:
    Currently the administrator is the only user who can use this library, however we will address this soon. In this step we will enable iTunes music sharing in the administrator's account, this will enable other users to access the files in the library.
    If you are not logged in as the administrator, do so; secondly, open iTunes and select "Preferences" from the "iTunes" menu, now click the "Sharing" tab, if "share my library on my local network" is not checked, the radio buttons below this will now become active, you may choose to share the entire libraries contents, or share only selected content.
    Sharing only selected content may be useful if their is explicit content in the library and minors use the network or machine that the library is connected to.
    If you have selected "share entire library" go to Step 3, if you have selected share "share selected playlists" read on.
    After clicking "share selected playlists" you must then select the playlists that you intend to share across your accounts and network. Once you have finished selecting the playlists, click "OK" to save the settings.
    Overview:
    In this step we:
    1. Enabled iTunes sharing in the administrator's account, now, users on the local network may access the iTunes library, however, users on the same machine may not.
    Step 3:
    Now we will enable users on the same machine to access the library on the machine. This is achieved by logging in as each user, opening iTunes, opening iTunes preferences, and clicking "look for shared music". now all users on the machine may also access the library that the administrator controls.
    This in effect will mean that the user will not need to use their user library, it will be provided to them via a pseudo network connection.
    As a secondary measure, I have chosen to write a generic login script that will move any content from the user's "Music/iTunes/iTunes Music" directory to the trash and then empties the user's trash.
    This is done through the use of an Automator Application: this application does the following actions.
    1. Uses the "Finder" action "Get Specified Finder Items"
    1a. The user's "~/Music/iTunes/iTunes Music" folder
    2. Uses the "Finder" action "Get Folder Contents"
    3. Uses the "Finder" action "Move to Trash"
    4. Uses the "Automator" action "Run AppleScript"
    4a. with the following:
    on run {input, parameters}
    tell application "Finder"
    empty trash
    end tell
    return input
    end run
    IMPORTANT: Once the script is adapted to the user account it must be set as a login item. in order to keep the script out of the way i have placed it in the user's "Library" directory, in "Application Support" under "iTunes".
    Overview:
    Here we:
    1. Enabled iTunes sharing in the user accounts on the host machine, in effect allowing all users of the machine to view a single iTunes library.
    2. (Optional) I have created a login application that will remove any content that has been added to user iTunes libraries, this in effect stops other users of the machine from adding music and files to iTunes.
    Step 4:
    If it is not already enabled, open system preferences and enable Fast User Switching in Accounts Options.
    Summary:
    We have shared a single iTunes library across multiple user account, while still allowing for network sharing. This method is designed to save space on machines, particularly those with smaller hard drives.
    I hope that this hint proves to be helpful and I hope everybody will give me feedback on my process.
    regards,
    Pete.
    iBook G4; 60GB Hard Drive, 512MB RAM, Airport Extreme   Mac OS X (10.4.6)   iWork & iLife '06, Adobe CS2, Final Cut Pro. Anything and Everything!!!

    how to share music between different accounts on a single computer

  • Can you open a report in Excel/Word desktop instead of the web pugin?

    using run_report_object( and web.show_document,
    how or can you get a report to open in the desktop/full version of MS Excel/Word instead of the web plugin versions?
    I can get the browser to open a report in pdf with my desktop adobe reader, but not with an rtf or xml/delimited desformat.
    Currently I don't pass a mimetype when opening as a pdf, but I do pass one in the url when i am destypes of xml, delimited and rtf,
    as this is the only way i have found out how to open the reports in word/excel.
    I'm in the process of upgrading from forms 6 client/server to 10g developer suite, so this is my try with a web based system.
    Does anyone have any suggestions, or where I should look.
    Below I listed my code from a procedure.
    the first part of the procedure is alot of converting, but if you skip down to the part between the 2 sets of double lines this fairly standard.
    PACKAGE BODY pmc_lib IS
    -- Procedure to run the report.
    procedure run_reports(v_report_name in varchar2, -- Report Name with or w/o a path.
    v_commode in number default synchronous, -- commode
    v_execmode in number default runtime, -- execute mode
    v_file_sys in number default filesystem, -- dummy
    v_param_list in paramlist, -- parameter list
    v_show_modes in varchar2 default null) is -- used for testing,
    -- if set to anthing but null, the report properties will display
    -- on the screen through an alert prior to printing.
    v_errorcode number;
    v_errortext varchar2(600);
    v_initialized boolean := false;
    v_prop_reportserver varchar2(200);
    v_report_path varchar2(200);
    v_user varchar2(100);
    v_user_sessionid number;
    v_forms_version varchar2(100);
    v_default_report_server varchar2(200);
    v_default_server_domain_path varchar2(200);
    v_connect_string varchar2(3) := get_application_property(connect_string);
    v_user_name varchar2(35) := get_application_property(username);
    report_id report_object;
    reportserverjob varchar2(100);
    v_jobid varchar2(100);
    rep_status varchar2(100);
    v_url varchar2(500);
    v_url2 varchar2(500);
    v_parameter_value varchar2(100);
    v_destype_param_value varchar2(100) := null;
    v_desformat_param_value varchar2(100) := null;
    v_desname_param_value varchar2(100) := null;
    v_value_n number := 0;
    v_param_type number := text_parameter;
    v_prop_execmode number;
    v_prop_commode number;
    v_prop_destype number;
    v_prop_filename varchar2(200);
    v_prop_source_block varchar2(200) := null;
    v_prop_query_name varchar2(200) := null;
    v_prop_desname varchar2(200) := null;
    v_prop_desformat varchar2(200) := null;
    v_prop_reportserver varchar2(200) := null;
    v_prop_other varchar2(200) := null;
    v_mimetype varchar2(200) := null;
    v_selected_mimetype varchar2(200) := null;
    report_not_generated exception;
    report_id_not_found exception;
    BEGIN
    v_forms_version := get_application_property(version);
    v_prop_reportserver := get_report_object_property('report1', report_server);
    v_report_path := null;
    v_user := v_user_name || '/' ||
    get_application_property(password) || '@' ||
    v_connect_string;
    if v_connect_string = 'NNN' then
    v_default_server_domain_path := 'pmcoracapp01.aapmc.com/reports/rwservlet';
    v_default_report_server := 'rep_pmcoracapp01_frhome1';
    else
    v_default_server_domain_path := 'oradevsrv.aapmc.com/reports/rwservlet';
    v_default_report_server := 'rep_oradevsrv_frhome1';
    end if;
    v_initialized := true;
    -- Check to see what version of forms is running.
    if substr(v_forms_version, 1, 1) <> '6' then
    -- Check to see if WEB version is running
    -- This may be an unnecessary check.
    if (get_application_property(user_interface) = 'WEB') then
    report_id := find_report_object('report1');
    -- id_null won't work on a report_id in Version 6, may put back in 10g once version 6 is gone completly
    -- if id_null(report_id) then
    -- raise report_id_not_found;
    -- end if;
    -- Because of Convertions from old system the following are needed.
    -- 1) If 'execmode' is runtime, then change it to batch.
    if v_execmode = runtime then
         v_prop_execmode := batch;
    else
         v_prop_execmode := v_execmode;
    end if;
    -- 2) If Report name has an attached path, then remove it.
    v_value_n := instr(lower(v_report_name), 'k:\pmc\new\');
    if v_value_n = 0 then
         v_prop_filename := v_report_name;
    else
         v_prop_filename := substr(v_report_name, v_value_n + 11);
    end if;
    -- From looking at the FORMS, 'destype' parameter is always passed in from the FORM.
    -- It is either 'preview' or 'file'.
    -- This is here for the converstion from Forms 6 to 10g.
    -- If for some reason destype has not been passed in as a parameter, you will get a FORM error,
    -- saying the parameter does not exists.
    begin
    -- 3) If 'destype' is one of the following, then change it to cache.
    get_parameter_attr(v_param_list, 'destype', v_param_type, v_destype_param_value);
    if lower(nvl(v_destype_param_value, 'null')) in ('preview', 'file', 'null') then
    v_prop_destype := cache;
    -- 3a) If 'destype' was = 'file' then check the 'desformat' and 'desname'.
    if lower(nvl(v_destype_param_value, 'null')) = 'file' then
    -- 3b) Get 'desformat' value
    get_parameter_attr(v_param_list, 'desformat', v_param_type, v_desformat_param_value);
    -- 'delimited' was not working, so change all 'delimited' to 'delimiteddata'.
    if lower(nvl(v_desformat_param_value, 'null')) = 'delimited' then
         v_desformat_param_value := 'delimiteddata';
    end if;
    -- 3c) If 'desformat' is NOT one of the following, then change it to pdf.
    if lower(nvl(v_desformat_param_value, 'null')) not in ('pdf', 'xml', 'rtf', 'delimiteddata') then
    v_prop_desformat := 'pdf';
    else
    v_prop_desformat := lower(v_desformat_param_value);
    end if;
    -- 4) Get 'desname' property.
    get_parameter_attr(v_param_list, 'desname', v_param_type, v_desname_param_value);
    v_prop_desname := lower(v_desname_param_value);
    end if;
    else
    v_prop_destype := lower(v_destype_param_value);
    end if;
    exception
    when others then
    null;
    end;
    -- If a desformat is rtf, xml, or delimited then get a mimetype to pass to the url
    if lower(v_prop_desformat) = 'rtf' then
    v_mimetype := '&mimetype=application/msword';
    elsif lower(v_prop_desformat) = 'xml' then
    v_mimetype := '&mimetype=application/vnd.ms-excel';
    elsif lower(v_prop_desformat) = 'delimiteddata' then
    v_mimetype := '&mimetype=application/vnd.ms-excel';
    end if;
    -- 6) If the Following are not set within the Report Object then
    -- set them to the following defaults.
    -- These are al required to be set for the Report Object to Function.
    -- These are the defaults for AAPMC.
    v_prop_execmode := nvl(v_prop_execmode, batch);
    v_prop_commode := nvl(v_prop_commode, synchronous);
    v_prop_destype := nvl(v_prop_destype, cache);
    v_prop_desformat := nvl(v_prop_desformat, 'pdf');
    v_prop_reportserver := nvl(v_prop_reportserver, v_default_report_server);
    -- Set All Report_Object Properties
    set_report_object_property(report_id, report_execution_mode, v_prop_execmode);
    set_report_object_property(report_id, report_comm_mode, v_commode);
    set_report_object_property(report_id, report_destype, v_prop_destype);
    set_report_object_property(report_id, report_filename, v_prop_filename);
    set_report_object_property(report_id, report_source_block, v_prop_source_block);
    set_report_object_property(report_id, report_query_name, v_prop_query_name);
    set_report_object_property(report_id, report_desname, v_prop_desname);
    set_report_object_property(report_id, report_desformat, v_prop_desformat);
    set_report_object_property(report_id, report_server, v_prop_reportserver);
    set_report_object_property(report_id, report_other, v_prop_other);
    -- Run Report_Object
    reportserverjob := run_report_object(report_id, v_param_list);
    v_jobid := substr(reportserverjob, length(v_prop_reportserver) + 2, length(reportserverjob));
    -- If Report Status is not 'FINISHED', then loop till it is.
    if reportserverjob is not null then
    rep_status := report_object_status(reportserverjob);
    while rep_status in ('RUNNING', 'OPENING_REPORT', 'ENQUEUED') loop
    rep_status := report_object_status(reportserverjob);
    end loop;
    if rep_status <> 'FINISHED' then
    raise report_not_generated;
    end if;
    -- Create 1st part of url.
    v_url := 'http://' || v_default_server_domain_path || '/getjobid' || v_jobid || '?server=' || v_prop_reportserver;
    -- Check for mimetype.
    if v_mimetype is not null then
    v_url := v_url || v_mimetype;
    end if;
    -- Final part of url.
    v_url2 := 'javascript:window.open("' || v_url || '", "", "fullscreen=no, titlebar=no, location=no, toolbar=no, menubar=no, status=no, resizable=yes"); self.close()';
    -- This is the built-in that calls a new browser window
    web.show_document(v_url2,'_blank');
    else
    raise report_not_generated;
    end if;
    end if;
    -- Destroy the parameter list.
    destroy_parameter_list(v_param_list);
    else
    -- This section if for Client Server, Version 6 of forms.
    -- It will do the same as before the conversion.
    -- It is only used before the complete conversion.
    if v_report_name is null then
    return;
    end if;
    v_value_n := instr(v_report_name, 'k:\pmc\new\');
    if v_value_n = 0 then
         v_prop_filename := 'k:\pmc\new\' || v_report_name;
    else
    v_prop_filename := v_report_name;
    end if;
    run_product(reports,
    v_prop_filename,
    v_commode,
    v_execmode,
    filesystem,
    v_param_list,
    null);
    end if;      
    -- create history record of the report being run
    insert into pmc_report_history values(
    s_pmc_report_history.nextval,
    v_prop_filename,
    v_user_name,
    sysdate,
    v_forms_version,
    v_jobid,
    v_destype_param_value,
    v_desformat_param_value,
    v_desname_param_value,
    v_prop_destype,
    v_prop_desformat,
    v_prop_desname,
    v_mimetype,
    v_window_open_params);
    commit;
    exception
    when report_id_not_found then
    show_user_alert('ERROR: Cannot Find Report Object!', null);
    when report_not_generated then
    show_user_alert('ERROR: Report Not Generated!', null);
    when others then
    v_errorcode := SQLCODE;
    v_errortext := SQLERRM;
    show_user_alert('ERROR : ' || v_errorcode || ' = ' || v_errortext, null);
    end;
    end;

    What you could try is downloading the report to the client pc using WEBUTIL_FILETRANSFER.URL_TO_CLIENT, then open the locally save file using something like:
    CLIENT_HOST('cmd /c rundll32.exe url.dll,FileProtocolHandler "localfilename"');

  • Re: [iPlanet-JATO] Re: session timeout when not submitting to a handler

    Mark--
    I know what's happening here, but am curious about your approach. You said
    in an earlier email that you were generating links directly to JSPs, but
    from what you are describing, you are generating JATO-style links to access
    JATO pages. Nothing wrong with that, but there is a signficant difference.
    Actually, it just occurred to me, I'm wondering what your URLs look like.
    The way the request dispatching works in JATO is it ignores anything after
    an initial "." in the final part of the URL path. For example, a request
    for "/myapp/module1/MyPage.jsp" doesn't actually try to hit the JSP, instead
    it tries to hit the JATO page "/myapp/module1/MyPage".
    The end result is that you may think you are accessing a JSP directly, but
    are instead accessing a JATO page. The reason the request dispatching works
    this way is because it is illegal to access JATO JSPs directly, and there is
    actually a (disabled) JATO feature that piggybacks on the use of the
    dot-delimited URL.
    So, now I need to understand your intent. I wasn't really sure why you were
    generating direct JSP/page links to begin with. This works against the Type
    II architecture JATO uses, in which all JATO requests go back to the
    controller servlet.
    If you are trying to design something like a menu page, you may have thought
    that it was burdensome to create a number of HREF children, plus implement
    event handlers for each of them. This definitely would be burdensome beyond
    just a handful of links, but this is why JATO provides other mechanisms for
    doing what I'll call here "polymorphic HREFs".
    Assuming this menu page scenario, the easiest thing to do is to simply use
    one HREF child on the page, and add a value to it each time it is rendered
    that distinguishes it from the other instances on the page. In your event
    handler for the HREF, you simply check this value and use it to decide which
    page to forward to. You can add a value to an HREF or Button by using the
    "addExtraValue()" method. Or, if you are using JATO 1.2, you can add extra
    query string NVPs right in the JSP document using the "queryParams"
    attribute of the <jato:href> tag. Thus, your one HREFchild and event
    handler become "polymorphic" because what they do depends on the context in
    which they are invoked.
    Now, I still don't have confirmation that this is what you were trying to
    do, so until I do, let me explain the exception you're seeing. JATO assumes
    that when a request comes in for a page that includes the pageAttributes
    NVP, it is a request coming from a previously generated JATO page. Because
    of the way JATO works, this means that the request dispatching code should
    send the request back to the originally rendered page. For example, if Page
    A renders an HREF, which the user then activates, JATO sends the request
    back to Page A for handling. All of the HREFs and forms generated during
    rendering of Page A actually refer back to Page A, regardless of where those
    links or buttons actually pass the request in their event handlers/Command
    objects.
    So, what's happening when you include the pageAttributes in your HREFs is
    that JATO is assuming that a request is being sent to the target page, with
    the assumption that the target page has a mechanism in place to handle the
    request. This assumption relies on the specification of the "originator" of
    the request being specified in the request. For links/HREFs, the name and
    value of the HREF is sent along with the request. For forms, the name and
    value of the button that was pressed are sent in the request. JATO uses the
    presence of these name/value pairs to decide which event handler, or which
    Command object, to invoke to handle the request.
    The exception you are receiving is saying that there was no object on the
    target page that indicated it could handle the request. This is to be
    expected, since you have not specified a query parameter that indicates
    which CommandField child is responsible the request. However, this is where
    I see the disconnect, because that is not what I believe you were trying to
    do (as explained above).
    So now, given all the information above, can you tell me what you're trying
    to accomplish, and whether or not the info I've given you has helped you to
    design a mechanism more in line with a JATO approach? If not, given that I
    understand what you're trying to do, I can offer a more concrete solution.
    Todd
    ----- Original Message -----
    From: <Mark_Dubinsky@p...>
    Sent: Monday, November 05, 2001 2:54 PM
    Subject: [iPlanet-JATO] Re: session timeout when not submitting to a handler
    This is the exception we get:
    (And BTW, leaving a blank value for the pageAttributes doesn't help)
    [05/Nov/2001 17:49:18:4] error: <portalServlet.processRequest>
    javax.servlet.ServletException: The request was not be handled by the
    specified handler
    at java.lang.Throwable.fillInStackTrace(Native Method)
    at java.lang.Throwable.fillInStackTrace(Compiled Code)
    at java.lang.Throwable.<init>(Compiled Code)
    at java.lang.Exception.<init>(Compiled Code)
    at
    javax.servlet.ServletException.<init>(ServletException.java:107)
    at
    com.putnaminvestments.common.jato.ApplicationServletBase.dispatchRequ
    est(Compiled Code)
    at
    com.putnaminvestments.common.jato.ApplicationServletBase.processReque
    st(Compiled Code)
    at
    com.putnaminvestments.bp.portal.portalServlet.processRequest(Compiled
    Code)
    at
    com.putnaminvestments.common.jato.ApplicationServletBase.doPost(Compi
    led Code)
    at
    com.putnaminvestments.common.jato.ApplicationServletBase.doGet(Compil
    ed Code)
    at javax.servlet.http.HttpServlet.service(Compiled Code)
    at com.putnaminvestments.bp.bpServletBase.service(Compiled
    Code)
    at javax.servlet.http.HttpServlet.service(Compiled Code)
    at
    com.netscape.server.servlet.servletrunner.ServletInfo.service(Compile
    d Code)
    at
    com.netscape.server.servlet.servletrunner.ServletRunner.execute(Compi
    led Code)
    at com.kivasoft.applogic.AppLogic.execute(Compiled Code)
    at com.kivasoft.applogic.AppLogic.execute(Compiled Code)
    at com.kivasoft.thread.ThreadBasic.run(Native Method)
    at com.kivasoft.thread.ThreadBasic.run(Native Method)
    at com.kivasoft.thread.ThreadBasic.run(Native Method)
    at com.kivasoft.thread.ThreadBasic.run(Native Method)
    at com.kivasoft.thread.ThreadBasic.run(Compiled Code)
    at java.lang.Thread.run(Compiled Code)
    --- In iPlanet-JATO@y..., "Todd Fast" <Todd.Fast@S...> wrote:
    Mark--
    Initially we tried to add the pageAttributes NVP as well, but that
    was
    causing an exception, so we stopped doing that.That's odd--what was the exception?
    Our problem now is that when the SessionTimes out it does not go
    to
    onSessionTimeout method as in processRequestMethod of the
    ApplicationServletBase it looks for pageAttributes. If it is notnull
    then only onSessionTimeOut method is called.This is sadly the only technique for determining if a session hastimed out
    and a new one been created, versus the initial creation of thesession.
    Is there any work around for this? Maybe you can suggest how topass
    the pageAttributes without causing the initial exception?Definitely--let me know what the exception was and I'll be able tosuggest
    something. However, it shouldn't really be any harder thanappending a
    "jato.pageAttributes=" empty NVP on the HREF.
    Todd
    Todd Fast
    Senior Engineer
    Sun/Netscape Alliance
    todd.fast@s...
    For more information about JATO, please visit:
    http://developer.iplanet.com/tech/appserver/framework/index.jsp

    OK, here's what I'm trying to do: We have, like you said, a menu
    page. The pages that it goes to and the number of links are all
    variable and read from the database. In NetD we were able to create
    URLs in the form
    pgXYZ?SPIDERSESSION=abcd
    so this is what I'm trying to replicate here. So the URL that works
    is
    pgContactUs?GXHC_GX_jst=fc7b7e61662d6164&GXHC_gx_session_id_=cc9c6dfa5
    601afa7
    which I interpreted to be the equivalent of the old Netd way. Our
    javascript also loads other frames of the page in the same manner.
    And I believe the URL-rewritten frame sources of a frameset look like
    this too.
    This all worked except for the timeout problem. In theory we could
    rewrite all URLs to go to a handler, but that would be...
    inconvenient.

  • T400 - Video problems and a long wait for repair...

    Hi,
    I'd just like to state my experience with Lenovo Customer Support for a video problem with my T400.  Bottom line, as of today, it's been around 27 business days that it's been with Lenovo, and 41 days total since it's failed on me, and nobody, including Lenovo Customer Support, seems to know what its status is exactly, except that they're waiting on a part which has no ETA.
    In July 2009, I bought a T400, a 2764CTO version with the switchable graphics between the internal intel graphics and the ATI GPU.
    All was well until February 1st, 2010, when the LCD sudden wouldn't work.  Well, it would work, but the screen was very very dim, even with the display maxed out on brightness.  You would have literally bring your nose to the screen in order to even make out any text or images - definitely unusable.  However, if you hooked up an external monitor via the video output, the T400 would display video output properly that way.  When I did this, I noticed that the switchable graphics option wasn't there any more - couldn't switch to the ATI GPU.  Based on this, I figured it must be a video card or LCD issue, or a combination of both.
    So, I called Lenovo Customer Support (CS) at 1-800-565-3344, since I'm up here in Canada, and I initially was issued a case number of 41JRFSD, and I agreed to send it to a local Lenovo Repair Centre.  Oops, my bad, I made a mistake using the locator tool I was told to use at bplocator.lenovo.com, and thought the Centre was relatively close.  Not quite.  So, I called Lenovo CS again, and they issued me with a new case number, 40KWSYF, and said they'd send a box for return to depot.  And within 2 days, Feb 2nd or 3rd, I got a Purolator courier return box.  That's fast service!  Pleased, I put my T400 in according to instructions, and I sent it off.
    Fast forward to about mid-February.  I called Lenovo CS, and apparently there was a delay - the depot needed a part that wasn't in stock. Fine, I know these things can happen - I'll wait.
    Fast forward to March 1st.  I talk to a Lenovo CS rep, and it appears that the part needed has arrived, and they've put a rush order to get the computer back to me. Great!
    Fast forward to March 8th, still no computer.  I talk to another Lenovo CS rep... strange, there's no update.  The issue gets escalated to the Depot managers.
    Fast forward to March 12th.  Still no word on my T400's status.  An email fron CS has been sent to the depot.  Not even the CS reps know what's going on.  The rep I talk to figures there should be a response by the end of the day.
    Fast forward to today, March 13th, 4:50pm Pacific Time.  I just finish talking to Lenovo CS, there's been no response from the depot.  Apparently there's a part that they're waiting on for repairs, but there's no ETA on it.  Is it the same part that I've waiting on all this time?  Is it a new one?  I don't know. 
    At this point, I've been told to send an email explaining my situation, and I've also been told to talk to Scott the next time I call CS on Monday after 3pm Eastern.  I have to stress that the Lenovo Customer Support Reps I've talked to have all been very sympathetic and have been courteous, helpful, and professional - something I appreciate from having worked in Customer Support myself.  But the bottom line remains: my computer's not back to me.
    So, my questions to the community here: is my experience here typical?  Is there any hope of my seeing my computer back, or even at least just the hard drive?  I've used Lenovo computers for work for the past 7 years, and it was my good work experiences that led me to buying a Lenovo for home use.  However, it's been a while since I've been without my T400, and I was hoping to get my taxes done on the computer too, since they're due at the end of March.  I'll reserve judgement on Lenovo until I get my computer back, but at this point, all I can say is... I'm disappointed.
    If you're reading this, I'll let you judge my experience for youself.  I'll update my case as it progresses. 
    Thanks!
    Moderator edit: Removed support contact private information, per the Community Rules.

    Hi all,
    So, an update with some good news: my computer is finally back!  
    After a total of over 40 business days (just over 2 months) I finally have my T400 back at home, working again!
    According to the spec sheets, the repair depot had to replace: the systemboard/planar, display/LCD panel, LCD cable, PC card, bluetooth, and the inverter.  BIOS/Embedded controller was also updated, along with the regular diagnostics to ensure everything was working properly.
    I give Lenovo credit though: they got the final parts to repair the computer on Monday, April 5th, and shipped my computer back to me for the next day (today, April 6th).  That's fast service, once repaired!
    However, my case spans over 4 screens of updates and repair depot orders of parts.
    Also, it took me over 10 calls to Lenovo's Customer Service, plus an escalation to a higher-level manager after 1 month had passed, to get progress updates and ETAs for repair.
    Lenovo called me only once to give me an update, and that was the manager whom my issue was escalated to: all the other times, I called Lenovo for an update.
    The story doesn't end here, however:
    In talking to Customer Support, they told me that Sales might be able to sell me an extended warranty at a discount, given the issues I had.  And indeed, after talking to Sales, they offered me a 1 year warranty extension at a price of just over $100 CDN, plus tax.  This is a sale price, compared to the regular retail of $129.  Unfortunately, they can't sell me just one month.
    At this point, I refused their offer, and again escalated to a manager to request an extension of exactly 1 month on my existing warranty.  I figure 1 month delay in repairs, that's plausible - crap happens, and while most repairs take 5-10 business days, I can understand it can sometimes go higher.  Two months though....  My request for a warranty extension is being considered by the manager it was escalated to.
    So, one last question for you folks reading this: am I being unreasonable, talking to Lenovo support one more time to request a 1 month extension of my warranty, given the length of time it's taken for repairs?  I'll post the response Lenovo will give me tomorrow, as they've said they'll do.
    One thing for sure: Lenovo's response will definitely influence my choice of brand from whom to buy a new computer (and it will influence the choice of my friends who've heard my issues, and maybe yours too).  My particular repair problem may not come up often, but if it does happen to you, I'd be happy to know of your experience.
    Thanks for sticking with me through the drama!

Maybe you are looking for

  • Word Web App can't open a document (corruption) but Word Desktop can

    Hi, My team and I are currently working on integrating a custom WOPI-Host and everything is going pretty good.  While testing out different documents that will be used in the system to see the supported features and the reaction of Word Web App we fo

  • Missing Apple apps / app features?

    Hi, am I blind or is there really no ToDo manager on the iPhone 3G? I can create appointments in iCal, but no todos??? Is it possible that I need to buy an app for such a basic calendar feature? And are the notes really not synked? And I seem to bee

  • MDM scenario query

    Hi All,         I wanted to understand how a MDM repository designed for the following scenario: I have  4  remote systems, A,B,C and D. For example ,lets take a customer Master data. I have 30 fields for the custmer,out of  which the field "payment

  • Adobe Reader crashes when fast scrolling and using IAccessible interface

    Acrobat Reader 8, 9 crashes on Vista, XP, 2003 server by following steps: 1. Open two huge documents (>1000 pages). 2. Get IAccessible object by AccessibleObjectFromWindow function from external application. 3. Fast scroll in one document and quickly

  • Is there is any download link  .VIA plugin for after effects cs5

    How we can convert the .VIA to TGA sequence. Please help