Katrina S. I need your expertise :-)

katrina,
i need your ipod expertise on a thread. let me know if you can help in this situation
http://discussions.apple.com/thread.jspa?messageID=1410355#1410355

eeeeek!
I think I tried to help Rick before, at this point maybe seeing if the iPod will work on another PC is the next step, to rule out a bad USB or cable problem.

Similar Messages

  • What would you do with this credit profile? I need your expertise.

    Hello MyFico Community,
    I am trying to build a decent credit profile. Is there anything I should be doing or not doing to improve my Credit Profile? Currently I have one foot in the Garden-LOL!For the last coupe monthsI have been receiving a lot of mailers, Citi, BoA, US Bank, AARP and a few others, so its  sort of tempting.  My Fico Scores are:
    760, 755 & 756. These scores are from my Discover, CapOne and Barclay statements. Goals scores are 800 across the board.   Reports:
    All reports are clean, 100% on-time payments, nothing negative reporting. Inquiries:
    I have 7, 6 and 8 inquiries showing on my reports.AAof Credit:  Not sure about this Experian/Credit.com- 6.7 years. Credit Sesame says 1.8 months?   Accounts:The accounts with balances will be paid to $0 by June 26th.Account Name:            Credit Limit:            Balance: 
    Amex Everyday              $10,000                    $286
    CapOne Venture            $10,000                    $1112CapOne QS                    $5000                       $555CapOne Platinum           $6800                        $0   Aviator                            $4000                        $0J.Crew                            $4000                        $0SportsmanGuide            $2500                        $0
    Discover                         $2000                        $0
    Target                             $200                          $0
    Wells Fargo                    $1700                        $0  I've begun using QS and Amex (0%APR) as main go-to cards. 
    Was also thinking i’d put everything I can on cards and PIF each month to take advantage of the 0% and rewards.
    Is this a good plan? I'm still learning how to best utilize my portfolio. Are there other cards I should look at acquiring?  I appreciate any input.

     
    Re: What would you do with this credit profile? I need your expertise. 
    Options06-15-2015 05:49 AM - edited 06-15-2015 06:03 AM
    What I'd do doesn't really matter.  These are not one-size-fits-all matters so each needs to determine his/her own strategy and tactics based on the individual's situation, goals, priorities, preferences, etc.  IMO you don't know what to do because you're not clear on these matters.  Very True, I am not clear but with the help of the community giving me things to consider I am getting there.
    You need to define what you needs/want and then prioritize that list.  That will give you a list of critiera that you then use to select cards that suit you. Thanks. Good way to focus my thinking about it.
    Rewards is a common criteria and if rewards matter to you then you need to look at your spend and where your money is going to select rewards with the most benefit to you. Since i’m going to be using a main CC, I’d rather have cash rewards first or rewards that are versatile for gift cards. I already have a travel card that works well for me so thats not that important.
    RandomSpirit wrote:
    AAof Credit:  Not sure about this Experian/Credit.com- 6.7 years. Credit Sesame says 1.8 months?  Thanks. Was wondering where they figured this. AAoA is just an average like any other average.  Add up the ages of the accounts and divide by the number of accounts.  Many find it easier to convert into months, calculate and then convert back into years.  You can use Excel and its date formulas if you don't want to do this manually.  There are also online AAoA calculators.  Experian is more likely to be correct.  CS is probably providing AAoOA.
     RandomSpirit wrote:
    Was also thinking i’d put everything I can on cards and PIF each month to take advantage of the 0% and rewards. Is this a good plan? You're really not leveraging a 0% offer if you're PIF'ing each month.  However, if you're not PIF'ing each month on cards without 0% offers then you're killing rewards.Okay this is confusing, would you mind clarifying? The Amex and QS have 0% interest for well into next year (not sure of exact date, I will look up again) so it would seem that it would not matter if i carry balance or pay in full until the real APR begins next year.
    So whats the best way to utilize these as my main cards to get as much cash back(QS) and MR point as possible. Carry balance or pif, or does it not matter in this case for now?
     RandomSpirit wrote:
    Are there other cards I should look at acquiring?  As with all other request you need to tell us what you need/want so we have something to use to narrow down the options for you.
    Now, I am leaning towards low interest being the most important to me, secondly would be cash back.
    RandomSpirit wrote:
    Was thinking about BoA Cash Rewards offer for 12.99 because of the lower interest rateHere's an example of why a prioritized list of criteria matters.  If the lowest possible interest is a priority above all else then you shouldn't be looking at rewards cards as they typically come with higher interest rates.  If you want the lowest possible APR you need to fins a barebones card.  They're offered with rates as low as 6.x% depending on what you qualify for. This is most important to me
    That said, rewards and a low APR aren't mutually exclusive but typically rewards cards will come with a higher APR as you aren't getting something for nothing.  While I do try to get my APR's as low as possible you might want to consider why APR is a concern if you're paying in full. In case I ever have to carry a real balance.Not telling you what to do here but consdier such things when prioritizing your list.  For example: is a lower APR more important than the biggest rewards for your spend?
     RandomSpirit wrote:
    Citi Dble Cash and, perhaps
    Chase Freedom for sign-up bonus?
    Honestly, I was thinking  to have a more diversified portfolio. I don;t have any Chase or City cards.So far we have:
    • 1 Low APR
    • 2-High rewards rate on non-category spend (Double Cash)
    • 4-Sign up bonus
    • 3-Diversity
    Which is most important?  Which is least?  Where do the rest fall?  We can't tell you this.  You need to tell us.
    Again, I'd recommend looking at your spend and ensuring that your card lineup maxmizes rewards on your spend.  The Double Cash is a good option for non category spend but if you haven't found higher rewards for a major spend category that you have then you might want to look into finding something for that category. Thanks for taking the time to offer your suggestions Tekeshi74. If gives me a lot consider.

  • We need your expertise!

    We are looking to automate the coloring process for digital versions of our signs. Right now, it takes 3-4 minutes per sign to do this manually.
    The goal of this project is to import a file from Gerber Omega into Adobe Illustrator where certain scripts can be run that recognizes the file name (or the user can select a certain script/style of sign) and this script fills in the appropriate colors for that style of sign. 
    Here’s an idea of what we want:
    I want to color a standard Caution sign with 2 lines of text and an image.  Let’s call it BCP15 (see attached .JPEG).
    1.         I import the file BCP15 from Gerber Omega
    2.         I open up BCP15 in Adobe Illustrator
    3.         I open up my ‘scripts’ category
    4.         I choose ‘Caution Sign Script’ in that category
    5.         It takes the background and colors it the proper color yellow.  It fills in all of the text black.  It fills in the ‘Caution’ header- a black oval with yellow writing.  It colors the external and internal parts of the image black, and the rest of the image yellow
    6.         I save it as a .JPEG
    7.         Repeat step #1 for next sign, substituting in whatever.
    We have several different headers and several colors (of which pertain to certain headers, some of them overlapping):
    • Caution  (Yellow, Black)
    • ANSI Caution (White, Yellow, Black)
    • Danger (White, Red, Black)
    • Green Cross (White, Green, Black)
    • Be Careful (White Green Black)
    • Biohazard (Orange, Black)
    • Radiation (Yellow, Red)
    • Notice (White, Blue, Black)
    • Please (White, Purple, Black)
    • Safety First (Green, White, Black)
    • Think (Green, White, Black)
    • Warning (Orange, Black)
    • ANSI Warning (White, Orange, Black)
    There might also be others, and we might also incorporate a set of ANSI headers we need too- why not if it automates the process.  The difficult part is how the file is imported into AI- it imports on a single layer with every part of the sign as an individual object.
    These programs need to be installed on 2 different Windows-based computers, and both computers have the latest version of AI as of this last year.  Time frame for the project is 10-15 days.
    You can visit our website or contact me directly for more information.  This is a contract job in the planning phase. Realistic quotes are being seriously considered.
    Chad Perlmutter
    Online Marketing Specialist
    Stonehouse Signs
    www.stonehousesigns.com
    [email protected]
    Specific Requirements:
    Experience writing Adobe Illustrator Scripts (with examples)
    Platform: Windows
    Programming Languages: AppleScript, JavaScript or VBScript
    Upon completion these scrips will be the property of Stonehouse Signs.
    Payment Terms/Methods TBD

    Chad, I saw your post in the general AI forum.
    Applying fills to closed paths and/or compounding those paths is fairly trivial.
    The problem is, your description and examples of the issue does not assure any unambiguous and consistent object-level attributes (position, size, stacking order, number of anchorPoints, object names, etc., etc.) which one can use to reliably target the appropriate path(s) in all files. Paths on an AI page, unless named, are just dumb paths. They don't know whether they are supposed to be "background" paths (like your cut-in rectangles and ellipses and rounded rectangles) or former text characters, or whatever. Too much depends on exactly how each file was originally constructed.
    In the general forum, it was already suggested to you that a practical level of automation for this problem would be to simply use an Action (macro) or perhaps several Actions for several sub-sets of the signs which are similarly constructed.
    Your problem, as described in the general forum, centers around your designer's complaint about having to select paths individually. He doesn't have to do that. There are numerous ways to select the necessary paths with much less tedium than one-at-a-time. The selected paths can then be compounded, and the winding rules settings can correct the voids and fills. All that can be done with a simple Action which can then be run on your 100 files in Batch Mode.
    But neither an Action nor a script can intelligently decide for you which of the paths on the page is supposed to be a "background" object of a different color, unless there is some consistent fact that can be detected to reliably identify the "panel" patches as such.
    But such an Action could do most of the gruntwork in a couple of seconds, and then pause to let you change the one or two paths that need to be treated differently. With only a couple hundred or so files to process, that would not be impractical in terms of manhours.
    It seems a frequent miss-assumption that a script can somehow "read the viewer's mind" in terms of what the page is supposed to look like. Repetitive automation requires unambiguous and consistent "hooks" that the script can latch onto to identify and target the appropriate paths. The samples you have shown so far do not necessarily suggest that consistency.
    JET

  • B NOIR NEED YOUR EXPERTISE!

    Upgraded from 4.9 to 5.0 and now the serato needs me to re-install each song into crates AGAIN. (They're all pink) This took weeks to do the first time in 4.9. Is there any way around this? Can I just go back to 4.9 with out any problems?
    You seem to be a great help to a lot of people on the forum! I thought you might be able to help me as well. I'm at a total loss and would really appreciate any help you could provide!!! Thank you in advance!

    Hiya. Been away on holiday for a week.
    I haven't done much work on these in recent times, but my suspicion here is that some real-time scan (by security software or a real-time backup utility service) is grabbing hold of your iTunes library files every now and then, and interfering with iTunes library-file writes.
    Are you using any real-time back-up services/utilities? (Mozy, carbonite, Black Blaze?)

  • Need your expertise in abdobe flex development

    hi exprts,
    i am an ABAP developer with fair knowledge in ABAP webdynpro. I am trying to learn integrating adobe flex component into webdynpro. i went through the SDN blogs by thomas jung and created one application as well, which is working fine. Now i want to move little further and try something little complicated. I have seen one SAP mentor hands on session where they  developed a sales order processing application for buying laptops
    [http://wiki.sdn.sap.com/wiki/display/EmTech/IslandsWDA_MHO]
    i want to develop something simillar ( not as complex as this). in my application, i will have two secions on the screen. lets say section 1 and section 2 and there will be some buttons. when i click on the button, some boxes images should appear in secion 1 ( like the laptops in the application). when i click on a box its image should appear in section 2 with some details of the box ( lets say dimensions of the box, similar to the demo application again). 
    I need to ur inputs regarding how to achieve this in flex. please advise
    thanks

    Hi Sudhakar,
    This entire part of showing details of an Item on click onto second screen will be done thru Flex side.
    Only thing you need to make sure that from backend all details are fetched correctly.
    Flow can be : you can have two canvas/panel (or any container UI in flex).
    In 1st view you can populate all entries using List or Datagrid.
    On ItemClick event on first screen populate second panel/canvas with all those item details using image, form, Datagrid etc UI.
    On another ItemClick event on 1st list entire content can be replaced by new item selected.
    you just have use ItemClick event of List/Datagrid in section 1.
    Code snippets you can easily get regarding same event.
    Hope this will help you.
    Regards,
    Vivek

  • Shane...need your expertise Re: stock answer# 42

    Shane, Having a problem with one of my clients airing ( cable ) a DVD I deliver. Even though I give them a letterboxed DVD, it plays back from their machine vertically stretched. I am at wits end. Please allow me to give you some info. I edit in Prores footage shot in XDCAM HD. I kept the encoding process
    simple this week and did not use Compressor just DVD SP. I checked the 16x9 letterbox in the General tab per your instructions and burned. Last evening I walked into a local sports bar to see if the program was on the air and how it looked. It seemed fine but it was playing on a wide screen TV so I have no idea how they had it configured. When I arrive home I turned on a 4x3 TV and it was vertically stretched! If I play it back in my studio from a stand alone DVD player into a 4x3 SD TV it looks fine. Could there be a setting in that DVD player at the cable company that I can tell them about or could I be doing something wrong here? I am really lost here. Shane, if you or anyone else has some insight it will be greatly appreciated.
    Best,
    Tom

    Shane Ross wrote:
    I think Studio nailed it. The TV settings. If it is stretched, then their TV is set to stretch the image. My HDTV has 4 settings...or 5. Zoom, Just, then some form of stretch, then the 4:3 square box. I leave it on JUST for regular TV signals, but 16:9 DVDs I adjust to...one of the other settings.
    Have them run thru their TV aspect ratio settings until they get it.
    But in order for the tv in the bar to have displayed it correctly it must have been an anamorphic dvd, not letterboxed as the OP stated. As David K and I have pointed out this is never going to give consistent results on both types of monitors when played from a single dvd player. The dvd player (in this case the cable company's) has to be set for connection to one type of screen or the other.
    In this case the choices for delivery are all going to be a compromise, either; broadcasting full quality anamorphic which will mean that those with 4:3 tvs see the incorrect aspect ratio or sacrificing quality by supplying/broadcasting and already letterboxed image for an increased likelihood of everybody seeing the right aspect ratio, although at a risk of those with 16:9 monitors seeing an unnecessarily letterboxed image (which is what I believe would happen to you shane if you keep your tv on 'Just' for tv broadcasts. It would try to make the 4:3 frame, black bars included, fill the 16:9 screen, albeit with a bit of algorithmic distortion and cropping, not a straight anamorphic squeeze. As I said before, 'zoom' would be the right option in this case.)
    In my experience the settings available are;
    4:3 - shows a 4:3 screen with black pillarboxing. The correct setting for 4:3 shows.
    14:9 - shows a 14:9 screen with black pillarboxing. For 4:3 shows, will fill a bit more of the screen horizontally but at the expense of some cropping top and bottom.
    wide/16:9 - stretches a 4:3 frame to fill the full 16:9 screen. The correct setting for anamorphic material ie SD dvds.
    zoom - scales a 4:3 frame to fill the full width of the screen while maintaining aspect ratio. The correct setting for letterboxed material although some tvs have 2 levels of zoom, one which correctly scales a 16:9 letterbox to the screen and one a bit tighter.
    Justify/Smart - Uses an algorithm to scale and distort the image so that a 4:3 frame fills the 16:9 screen by a combination of cropping a little height and stretching the image horizontally, but more so at the edges and less so in the centre. Gives a strange effect to horizontally scrolling titles.
    Message was edited by: J S Langham

  • Need your expertise

    I need to create a "notice board" in my web page. each notice will be posted to a mysql db. I need my web page to always display the latest notice as the first notice and the rest should be below it according to the posted sequence.
    1. How should I do it? (my initial thought was to pull in the data by the PRIMARY ID. But that doesn't seem to work because always when data is been posted to a mysql db it updates the next field not the previous field).
    2. Please advice with any important thing which might be helpful in creating my "notice board". This is how I've planned it.
    User input data  >  Updates the mysql >  Data is being pulled in to my webpage using a server side script  >  the latest input data will display on top the rest according to the posted time.
    NOTICE at 3.00PM
    text....
    NOTICE at 2.00PM
    text...
    NOTICE at 1.15PM
    text...

    I have a dynamic text field to display the NOTICE.Assume there are 200 NOTICE to be pulled in from the mysql and to be displayed in this dynamic text field. How do I write the code to set a format to display the data? The server side script pulls in the data by the datestamp
    1. I need to display all of them in an organized way.
    2. How will the dynamic text box adjust its size according to the number of data? Can this dynamic text be placed inside a scrollplane so all the data could be seen? (is this the way to do this)?
    e.g.
    Heading 1
    Date/Time
    Notice
    //a space
    Heading 2
    Date/Time
    Notice
    //a space
    Heading 3
    Date/Time
    Notice
    receiveLoad.onData = function(src) {
       var a:Array=src.split(",,");
       all_notice.text=a[0]+newline+a[1]+newline+a[2];
    //how to have the space and continue this repeatedly?

  • Event/Calendar solution feedback!  I need your expertise!

    I'm not a programmer by any stretch, but I would love to know
    what script this is, and if anyone knows of an extension or
    solution that would integrate something similarly using dw. I'm
    thinking it's asp, or php.
    http://www.callutheran.edu/events
    Notice the calendar in the upper right, with the content
    displaying accordingly in the table centered. Each event has it's
    own page, and also has the ability to reappear on the calendar on
    different dates. Does anything like this exist, or does it have to
    be programmed by hand? I already checked out wordpress' calendar
    which is very close, but seemed involved.
    Thanks guys!

    It's hard to tell, but check out www.easyphpcalendar.com.
    jaygirlca wrote:
    > I'm not a programmer by any stretch, but I would love to
    know what
    > script this is, and if anyone knows of an extension or
    solution that
    > would integrate something similarly using dw. I'm
    thinking it's asp,
    > or php.
    http://www.callutheran.edu/events
    > Notice the calendar in the upper right, with the content
    displaying
    > accordingly in the table centered. Each event has it's
    own page, and
    > also has the ability to reappear on the calendar on
    different dates.
    > Does anything like this exist, or does it have to be
    programmed by
    > hand? I already checked out wordpress' calendar which is
    very close,
    > but seemed involved.
    > Thanks guys!

  • Need your expertise judgement....

    Hi All,
    I have an internal table i_catsdb (having catsdb data).
    It is defined like this:
            counter
            refcounter
            pernr
            creation_date (.... some other fields...and then)
            status
            Hours
    <b>Now, i know that there will around 10,000 records in this internal table. This internal table is sorted on field counter.</b>
    My task is to, make the hours negative based on refcounter and pernr...
    for eg: If records in i_catsdb are like,
    counter       Ref Counter        Pernr     Hours  status
    1                               100001    9.0    60
    2            1                  100001    8.0    60
    3            2                  100001    8.5    60
    4            3                  100001    8.2    30
    then i should get the following records in i_catsdb.
    counter     Ref Counter     Pernr     Hours  status
    1                               100001    9.0    60
    2            1                  100001    8.0    60
    3            2                  100001    8.5    60
    4            3                  100001    8.2    30
    1                               100001    -9.0   60
    2                               100001    -8.0   60
    3                               100001    -8.5   60
    (In total 7 records)
    Now the question is, which among the below options is opimimal in terms of performance?
    Option 1: (<b>My Choice</b>) Have another internal(say i_temp) with same fields of i_catsdb (but, have pernr and counter as key fields,sorted on the same).
    Loop on i_catsdb, read i_temp with pernr and counter = i_catsdb-ref_counter, and negate the hours, clear refcounter and take the record as new record into i_catsdb.
    Option 2: loop on i_catdb, try reading the same internal table with pernr and counter = ref_counter, negate hours, clear ref_counter and insert as new row in i_catsdb.
    Though, its a lengthy question.... i want to be more clear.
    Regards,
    Raj

    Hi,
    I would also go with Option 1 and agree with Rob and Rich. Here is my contribution in terms of logic..
      DATA: lv_tabix LIKE sy-tabix VALUE 1.
      DO.
        READ TABLE i_catsdb INDEX lv_tabix.
        IF sy-subrc EQ 0.
          IF NOT i_catsdb-refcounter IS INITIAL
          AND NOT i_catsdb-pernr IS INITIAL.
            READ TABLE i_catsdb WITH KEY refcounter = i_catsdb-refocounter
                                         pernr = i_catsdb-pernr.
            IF sy-subrc EQ 0.
              CLEAR i_catsdb-refcounter.
              i_catsdb-hours = i_catsdb-hours * -1.
              APPEND i_catsdb TO i_temp. "Same structure
            ENDIF.
          ENDIF. 
        ELSE.
          EXIT.
        ENDIF.
        ADD 1 TO lv_tabix.
      ENDDO.
      APPEND LINES OF i_temp TO i_catsdb.
    Hope this helps..
    Sri
    Message was edited by: Srikanth Pinnamaneni

  • Newb needs your expertise

    So I came across Logic Studio and have been going through the razer sharp learning curve, but now I am stuck. I bet it's something SOOOOOO simple. Here it goes....
    I am recording audio on audio tracks to much success. On separate software tracks in the arrange window I was able to record using the piano roll to add some convincing percussion. I went back and tried to record again on the percussion software instrument tracks but I cannot!
    When I select the track (and highlight the R button) in the arrange window it shows in the Inspector and I can hear the notes. When I press record as usual the measuring ruler turns red as it should but there is no recording.
    PLEASE - I know there must be some box checked/ unchecked function...what is the issue?
    Thanks!
    j
    I come from an Audobe Audition background and I'm trying to give logic a chance.

    good idea, I posted there and the mod was awesome at first but the answer didn't work and was only valid in older versions of logic.
    i guess i could just trash and reinstall the whole thing, but that sounds so crazy when it's gotta be something easily switchable

  • Duane I need your expertise I think

    I have another posting on here as well from today, but I have not recieved any suggestions.
    Having troubles getting my airport extreme (snow) to work.
    I'm sending out the Duane signal. Please help.

    Hey Duane,
    I should add that this all started more or less in trying to access another network. My wife and I were out of town and I was trying to log onto the network at the Inn we were staying at and while I could see their network at times, and I had all the log on info from them, I was not able to log onto their network and this all started happening with the random dropping out of a network that was visible.
    Is it possible that in trying to log onto their network that I changed something on the PB? There system was a PC based system, but the Inn Keeper did not really know much about anything other than the network name and the network key.
    I have never had any problems joining a network in the past, but it is possible that I changed something in an attempt to try to log onto the Inn's network. With that said it would seem that I should know what I changed, but in reality I did not think I changed anything, but then when I got home the same problem that occured at the Inn is now more or less happening at the house. It would seem as though I could still log on at the house, but be it a password or some configuration problem I have not been able to access any network.
    Just thought I would share all that with you as well in hopes of helping the situation and possibly anyone else who is having similar problems, which it appears that many people are.
    Thanks again.

  • Hi apple users, I am in need of your expertise. I have a mov file and mp4 file which I need converted to DVD. However IDVD quality is terrible and wondering if anyone can help!?

    Hi apple users, I am in need of your expertise. I have a mov file and mp4 file which I need converted to DVD. However IDVD quality is terrible and wondering if anyone can help!?
    I created project in iMovie then exported it to MP4 and also MOV file at highest definition possible + I added it to iDVD and had a number issues about encoding errors regarding the mp4 file. MOV worked but the quality was terrible.....
    MOV file is as follows:
    4.08GB
    Codecs: H.264, ACC
    Colour Profile: HD (1-1-1)
    Dimensions: 1920 x 1080
    Duration: 12:33
    Audio Channels: 2
    MP4 File is as follows:
    3.02GB
    Codecs: H.264, ACC
    Colour Profile: HD (1-1-1)
    Dimensions: 1280 x 720
    Duration: 12:33
    Audio Channels: 6
    I have a MacBook Pro using the Yosemite system upgrade.
    I have updated iDVD and iMovie.
    I even bought the iSkysoft app from the mac store and that was terrible too.
    PLEASE HELP i am getting desperate and about to launch this macbook into the air
    2.66 GHz Intel Core i7
    Version 10.10. 2

    First of all, Hunt--thanks for responding!
    "First, where are you playing the MPEG-2, that you see that jitter?"
    On both a MacBook Pro, an Acer laptop and my Mac Tower. I would love to think that it is a problem with the playback system, and that if I merely send the file off to the duplicator they won't have the same problem. Maybe that is the case...I don't know if I have a choice rather than sending it off to see. But it happens in the same spots, in the same way, on all three of the players so I'm a little reluctant to have faith.
    "Another thing that can cause jitter in an MPEG-2 is the Bit-Rate - higher the Bit-Rate, the better the quality, but the larger the file. For a DVD, one is limited by the total Bit-Rate (both Audio & Video), but with longer prodcutions, some users choose too low a Bit-Rate. If this is the issue, one would need to go back to the original Project and do a new Export/Share."
    Of course, but in the case there is no more 'original project.' It is gone like the wind, stolen along with his computer and backups.
    I think I am stuck using one of two files as my master: a DVD he burned where I only see the stutter/vibration/jitter once, or the mpeg2 file where I see it three times. Hopefully, the duplication house can rip if off of one of them and not see the jitter. I know that in audio, my personal filed, you can do a lot to enhance already existing sound--EQ, compression, tape saturation emulation software, etc. I guess I'm hoping there is some kind of analog to the video world that address jitter after a source has been printed--if indeed the source has been printed to be jittery.
    Thanks,
    Doug

  • Need your help in Remodeling concept

    Hi Gurus need your help in time estimations
    I have a cube with data and now I need to add 10 new info objects to the cube which are including Date fields (BUDAT, BLDAT) these 10 fields will be populated to the cube from a Z table in ECC as we donu2019t have these fields in the cube we have to go for remodeling of the cube
    My client requires how much time it will take to complete this
    Now I want to know how much time it would take to do this (if any customer exits and user exits are required) and addition if new fields will have any effect on the current queries
    Please advice in this
    Thank you

    The time taken will depends on a lots of factor like server speed, available memory, background jobs etc. Apart from this, the time will also depends on how much the cube is filled i.e. the no. of records in the cube. Its very abstract to tell you the exact time taken for this. But, please make sure that you have the backup of the cube which you are going to re-model. T0 say, I think 3-4 hours should be ok for the remodelling.
    Thanks.
    Shambhu

  • Need your help on performance issue please

    Hello everyone!
    I need your help to understand an effect I notice with a Thread class I built. I currently work on enhancement of my application Playlist Editor (see http://www.lightdev.com/page74.htm) and a new release will be available soon.
    Among other extensions the new release will have a title filter function which is based on audio data that is recursively read from ID3 tags of files found in a given root directory. The data collection is done by a CollectionThread class which reads into a data model class AudioDataModel and the entire process works fine, no problem with that.
    However, when my application is started for the first time the CollectionThread runs approximately 3 minutes to collect data from approximately 4300 audio files on an Intel Pentium M 1,4 GHz, 512 MB RAM, Windows XP SP2. When the application is shut down and started again, it takes only a few seconds to do the same task for all subsequent launches.
    I already tried to start the application with java option -Xms40m to increase initial heap size. This increases performance in general but the effect is still the same, i.e. first run lasts significantly longer than subsequent runs.
    I also tried to build a pool mechanism which creates many empty objects in the data model and then releases them to contain the actual data at is being read in but this did not lead to better performance.
    It must have to do with how Java (or Windows?) allocates and caches memory. I wonder whether there is a way to pre-allocate memory or if there are any other ideas to improve performance so that the process always only takes seconds instead of minutes?
    I attach the key classes to this message. Any help or ideas is much appreciated!
    Thanks a lot a best regards
    Ulrich
    PS: You can use the news subscription service at
    http://www.lightdev.com/dynTemplate.php4?id=80&dynPage=subscribe.php4 to be informed when the new release of Playlist Editor is available.
    All classes posted here do not need debugging, they already have proven to run error free. The classes are only posted for information for the interested reader - no need to go through all the stuff in detail - only if it interests you.
    My application calls class CollectionThread wich is a subclass of InfoThread. CollectionThread recursively goes through a directory and file structure and stores found ID3 tag information in instances of class ID3v11Tag which in turn gets stored in one instance of class AudioDataModel. All classes are shown below.
    This is the mentioned CollectionThread
    * Light Development Playlist Editor
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.app.playlisteditor.data;
    import com.lightdev.lib.util.InfoThread;
    import java.io.File;
    * A class to collect audio data from a given storage location.
    * <p>
    * <code>CollectionThread</code> uses ID3 tag information to gain data.
    * </p>
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software as well as any licensing notes
    *      inside this documentation
    * @version 1, October 13, 2004
    public class CollectionThread extends InfoThread {
       * constructor
       * @param model  AudioDataModel  the data model to collect data to
      public CollectionThread(AudioDataModel model) {
        this.model = model;
       * constructor, creates a new empty AudioDataModel
      public CollectionThread() {
        this(new AudioDataModel());
       * set the data model to collect data to
       * @param model AudioDataModel  the model to collect data to
      public void setModel(AudioDataModel model) {
        this.model = model;
       * get the data model associated to this thread
       * @return AudioDataModel  the data model
      public AudioDataModel getModel() {
        return model;
       * set the directory to collect data from
       * @param rootDir File  the directory to collect data from
      public void setRootDirectory(File rootDir) {
        this.rootDir = rootDir;
       * do te actual work of this thread, i.e. iterate through a given directory
       * structure and collect audio data
       * @return boolean  true, if work is left
      protected boolean work() {
        boolean workIsLeft = true;
        maxValue = -1;
        filesProcessed = 0;
        if(getStatus() < STATUS_HALT_PENDING) {
          countElements(rootDir.listFiles());
        if(getStatus() < STATUS_HALT_PENDING) {
          workIsLeft = collect(rootDir.listFiles());
        return workIsLeft;
       * count the elements in a given file array including its subdirectories
       * @param files File[]
      private void countElements(File[] files) {
        int i = 0;
        while (i < files.length && getStatus() < STATUS_HALT_PENDING) {
          File file = files;
    if (file.isDirectory()) {
    countElements(file.listFiles());
    i++;
    maxValue++;
    * recursively read data into model
    * @param files File[] the file array representing the content of a given directory
    private boolean collect(File[] files) {
    int i = 0;
    while(i < files.length && getStatus() < STATUS_HALT_PENDING) {
    File file = files[i];
    if(file.isDirectory()) {
    collect(file.listFiles());
    else if(file.getName().toLowerCase().endsWith("mp3")) {
    try {
    model.addTrack(file);
    catch(Exception e) {
    fireThreadException(e);
    i++;
    filesProcessed++;
    fireThreadProgress(filesProcessed);
    return (i<files.length);
    /** the directory to collect data from */
    private File rootDir;
    /** the data model to collect data to */
    private AudioDataModel model;
    /** the number of files this thread processed so far while it is running */
    private long filesProcessed = 0;
    This is class InfoThread
    * Light Development Java Library
    * Copyright (C) 2003, 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.lib.util;
    import java.util.Vector;
    import java.util.Enumeration;
    * Abstract class <code>InfoThread</class> implements a status and listener concept.
    * An <code>InfoThread</code> object actively informs all objects registered as listeners about
    * status changes, progress and possible exceptions. This way the status of a running
    * thread does not require a polling mechanism to be monitored.
    * <p>
    * <code>InfoThread</code> implements the following working scheme
    * </p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software
    * @version Version 1, October 13, 2004
    public abstract class InfoThread extends Thread {
       * construct an <code>InfoThread</code> object
       * <p>This class is meant to be used when a <code>Thread</code> object is needed that actively
       * informs other objects about its status</code>. It is a good idea therefore to register
       * one or more listeners with instances of this class before doing anything
       * else.</p>
       * @see addInfoThreadListener
      public InfoThread() {
       * set the amount of time this thread shall idle after it is through with one
       * work cycle and before a next work cycle is started. This influences the time
       * other threads have for their work.
       * @param millis long  the number of milliseconds to idle after one work cycle
      public void setIdleMillis(long millis) {
        idleMillis = millis;
       * Causes this thread to begin execution; the Java Virtual Machine calls the <code>run</code>
       * method of this thread. Calls method <code>prepareThread</code> before calling
       * <code>run</code>.
       * @see run
       * @see prepareThread
      public synchronized void start() {
        setStatus(STATUS_INITIALIZING);
        prepareThread();
        setStatus(STATUS_READY);
        super.start();
       * call method <code>start</code> instead of this method.
       * calling this method directly will lead to an exception
       * @see start
      public void run() {
        //System.out.println("InfoThread.run");
        if (status == STATUS_READY) {
          boolean workIsLeft = true;
          setStatus(STATUS_RUNNING);
          while (status < STATUS_STOP_PENDING && workIsLeft) {
            if (status < STATUS_HALT_PENDING) {
              workIsLeft = work();
              if(!workIsLeft) {
                setStatus(STATUS_WORK_COMPLETE);
            if (status == STATUS_HALT_PENDING) {
              setStatus(STATUS_HALTED);
            else if (status == STATUS_STOP_PENDING) {
              setStatus(STATUS_STOPPED);
            else {
              try {
                sleep(idleMillis);
              catch (InterruptedException e) {
                fireThreadException(e);
        else {
          // error: Thread is not ready to run
        setStatus(STATUS_THREAD_FINISHED);
       * stop this thread. This will terminate the thread irrevokably. Use method
       * <code>haltThread</code> to pause a thread with the possiblity to resume work later.
       * @see haltThread
      public void stopThread() {
        switch (status) {
          case STATUS_RUNNING:
            setStatus(STATUS_STOP_PENDING);
            break;
          case STATUS_HALT_PENDING:
            // exception: the thread already is about to halt
            break;
          case STATUS_STOP_PENDING:
            // exception: the thread already is about to stop
            break;
          default:
            // exception: a thread can not be stopped, when it is not running
            break;
       * halt this thread, i.e. pause working allowing to resume later
       * @see resumeThread
      public void haltThread() {
        switch (status) {
          case STATUS_RUNNING:
            setStatus(STATUS_STOP_PENDING);
            break;
          case STATUS_HALT_PENDING:
            // exception: the thread already is about to halt
            break;
          case STATUS_STOP_PENDING:
            // exception: the thread already is about to stop
            break;
          default:
            // exception: a thread can not be halted, when it is not running
            break;
       * resume this thread, i.e. resume previously halted work
       * @see haltThread
      public void resumeThread() {
        if(status == STATUS_HALTED || status == STATUS_HALT_PENDING) {
          setStatus(STATUS_RUNNING);
        else {
          // exception: only halted threads or threads that are about to halt can be resumed
       * this is the method to prepare a thread to run. It is not implemented in this abstract
       * class. Subclasses of <code>InfoThread</code> can implement this method to do anything
       * that might be required to put their thread into STATUS_READY. This method is called
       * automatically by method <code>start</code>.  When implementing this method, it should
       * call method <code>fireThreadException</code> accordingly.
       * @see start
       * @see fireThreadException
      protected void prepareThread() {
        // does nothing in this abstract class but might be needed in subclasses
       * this is the main activity method of this object. It is not implemented in this abstract
       * class. Subclasses of <code>InfoThread</code> must implement this method to do something
       * meaningful. When implementing this method, it should call methods
       * <code>fireThreadProgress</code> and <code>fireThreadException</code> accordingly.
       * @return boolean true, if work is left, false if not
       * @see fireThreadProgress
       * @see fireTreadException
      protected abstract boolean work();
       * add an <code>InfoTreadListener</code> to this instance of <code>InfoThread</code>
       * @param l InfoThreadListener  the listener to add
       * @see removeInfoThreadListener
      public void addInfoThreadListener(InfoThreadListener l) {
        listeners.add(l);
       * remove an <code>InfoTreadListener</code> from this instance of <code>InfoThread</code>
       * @param l InfoThreadListener  the listener to remove
      public void removeInfoThreadListener(InfoThreadListener l) {
        listeners.remove(l);
       * notify all <code>InfoThreadListener</code>s of a status change
       * @param fromStatus int  the status tis thread had before the change
       * @param toStatus int  the status this thread has now
      protected void fireThreadStatusChanged(int fromStatus, int toStatus) {
        Enumeration e = listeners.elements();
        while(e.hasMoreElements()) {
          Object l = e.nextElement();
          if(l instanceof InfoThreadListener) {
            ((InfoThreadListener) l).threadStatusChanged(this, fromStatus, toStatus);
       * notify all <code>InfoThreadListener</code>s of an exception in this thread
       * @param ex Exception  the exception that occurred
      protected void fireThreadException(Exception ex) {
        Enumeration e = listeners.elements();
        while(e.hasMoreElements()) {
          Object l = e.nextElement();
          if(l instanceof InfoThreadListener) {
            ((InfoThreadListener) l).threadException(this, ex);
       * notify all <code>InfoThreadListener</code>s of the progress of this thread
       * @param progressValue long  a value indicating the current thread progress
      protected void fireThreadProgress(long progressValue) {
        Enumeration e = listeners.elements();
        while(e.hasMoreElements()) {
          Object l = e.nextElement();
          if(l instanceof InfoThreadListener) {
            ((InfoThreadListener) l).threadProgress(this, progressValue, maxValue);
       * set the status of this thread and notify all listeners
       * @param newStatus int  the status this thread is to be changed to
      private void setStatus(int newStatus) {
        //System.out.println("InfoThread.setStatus oldStatus=" + status + ", newStatus=" + newStatus);
        int fromStatus = status;
        status = newStatus;
        fireThreadStatusChanged(fromStatus, newStatus);
       * get the current status of this thread
       * @return int  the status
      public int getStatus() {
        return status;
       * cleanup before actual destruction.
      public void destroy() {
        //System.out.println("InfoThread.destroy");
        cleanup();
        super.destroy();
       * cleanup all references this thread maintains
      private void cleanup() {
        //System.out.println("InfoThread.cleanup");
        listeners.removeAllElements();
        listeners = null;
      /* ----------------------- class fields start ------------------------ */
      /** storage for the objects this thread notifies about status changes and progress */
      private Vector listeners = new Vector();
      /** indicator for the status of this thread */
      private int status = STATUS_NONE;
      /** maximum value for threadProgress */
      protected long maxValue = -1;
      /** the idle time inside one work cycle in milliseconds */
      protected long idleMillis = 1;
      /* ----------------------- class fields end -------------------------- */
      /* ----------------------- constants start --------------------------- */
      /** constant value indicating that no status has been set so far */
      public static final int STATUS_NONE = 0;
      /** constant value indicating that the thread is currently initializing */
      public static final int STATUS_INITIALIZING = 1;
      /** constant value indicating that the thread is ready to run */
      public static final int STATUS_READY = 2;
      /** constant value indicating that the thread is running */
      public static final int STATUS_RUNNING = 3;
      /** constant value indicating that the thread is about to halt */
      public static final int STATUS_HALT_PENDING = 4;
      /** constant value indicating that the thread is halted */
      public static final int STATUS_HALTED = 5;
      /** constant value indicating that the work of this thread is complete */
      public static final int STATUS_WORK_COMPLETE = 6;
      /** constant value indicating that the thread is about to stop */
      public static final int STATUS_STOP_PENDING = 7;
      /** constant value indicating that the thread is stopped */
      public static final int STATUS_STOPPED = 8;
      /** constant value indicating that the thread is finished */
      public static final int STATUS_THREAD_FINISHED = 9;
      /* ----------------------- constants end --------------------------- */
    }this is the InfoThreadListener interface
    * Light Development Java Library
    * Copyright (C) 2003, 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.lib.util;
    * An interface classes interested to receive events from objects
    * of class <code>InfoThread</code> need to implement.
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software
    * @version Version 1, October 13, 2004
    public interface InfoThreadListener {
       * method to receive a status change notification from a thread
       * @param thread InfoThread  the thread which status changed
       * @param fromStatus int  the status which the thread had before the change
       * @param toStatus int  the status which the thread has now
      public void threadStatusChanged(InfoThread thread, int fromStatus, int toStatus);
       * method to receive a notification about the progress of a thread
       * @param thread InfoThread  the thread which notified about its progress
       * @param progressValue long  the value (e.g. 10 if 100 percent completed, 20 of 1 million files processed, etc.)
      public void threadProgress(InfoThread thread, long progressValue, long maxValue);
       * method to receive a notifiaction about the fact that an exception occurred in a thread
       * @param thread InfoThread  the thread for which an exception occurred
       * @param e Exception  the exception that occurred
      public void threadException(InfoThread thread, Exception e);
    }This is class AudioFileDescriptor
    * Light Development Java Library
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.lib.audio;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.io.Serializable;
    import java.text.DecimalFormat;
    * This class models characteristics of an audio file such as the absolute path
    * of the file, its tag contents (if any) and the play duration, etc.
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software
    * @version Version 1, October 13, 2004
    public class AudioFileDescriptor implements Serializable, Comparable {
      public AudioFileDescriptor(String absolutePath) throws FileNotFoundException, IOException {
        load(absolutePath);
      public boolean equals(Object o) {
        if(o != null && o instanceof AudioFileDescriptor) {
          return ((AudioFileDescriptor) o).getAbsolutePath().equalsIgnoreCase(this.getAbsolutePath());
        else {
          return false;
      public void load(String absolutePath) throws FileNotFoundException, IOException {
        this.absolutePath = absolutePath;
        RandomAccessFile rf = new RandomAccessFile(absolutePath, "r");
        if(id3v11Tag == null) {
          id3v11Tag = new ID3v11Tag(rf, false);
        else {
          id3v11Tag.readTag(rf, rf.length() - 128);
        rf.close();
      public String getAbsolutePath() {
        return absolutePath;
      public ID3v11Tag getID3v11Tag() {
        return id3v11Tag;
      public void setID3v11Tag(ID3v11Tag tag) {
        this.id3v11Tag = tag;
      public String toString() {
        DecimalFormat df = new DecimalFormat("00");
        return id3v11Tag.getArtist() + ", " + id3v11Tag.getAlbum() + " - " +
            df.format(id3v11Tag.getTrackNumber()) + " " + id3v11Tag.getTitle();
       * Compares this object with the specified object for order.
       * @param o the Object to be compared.
       * @return a negative integer, zero, or a positive integer as this object is less than, equal to,
       *   or greater than the specified object.
       * @todo Implement this java.lang.Comparable method
      public int compareTo(Object o) {
        return toString().compareTo(o.toString());
      private String absolutePath;
      private ID3v11Tag id3v11Tag;
      private transient long duration = -1;
      private transient int type = TYPE_UNKNOWN;
      public static final transient int TYPE_UNKNOWN = 0;
      public static final transient int TYPE_MP3 = 1;
    }This is class ID3V11Tag into which the data is actually stored
    * Light Development Java Library
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.lib.audio;
    import java.io.File;
    import java.io.RandomAccessFile;
    import java.io.IOException;
    import java.io.Serializable;
    import java.text.DecimalFormat;
    * This class is a very simple implementation of an ID3v11Tag. It models an ID3 tag
    * pretty much the same way as it is physically stored inside an audio file.
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software
    * @version Version 1, October 13, 2004
    public class ID3v11Tag implements Serializable, Comparable {
       * construct an ID3v11Tag and read tag content from a given file
       * <p>This constructor can be used for cases where a RandomAccessFile has already
       * been opened and will be closed elsewhere</p>
       * @param rf RandomAccessFile  the open file to read from
       * @param isAtTagStartPos boolean  true, if the file pointer is at the
       * position where the ID3 tag starts; when false, the pointer is positioned accordingly here
       * @throws IOException
      public ID3v11Tag(RandomAccessFile rf, boolean isAtTagStartPos) throws IOException {
        if(isAtTagStartPos) {
          readTag(rf);
        else {
          readTag(rf, rf.length() - 128);
       * construct an ID3v11Tag and read tag content from a file at a given location
       * <p>This constructor opens and closes the audio file for reading</p>
       * @param absolutePath String  the absolute path to the audio file to open
       * @throws IOException
      public ID3v11Tag(String absolutePath) throws IOException {
        RandomAccessFile rf = new RandomAccessFile(absolutePath, "r");
        readTag(rf, rf.length() - 128);
        rf.close();
       * construct an ID3v11Tag and read tag content from a given file
       * <p>This constructor opens and closes the audio file for reading</p>
       * @param audioFile File  the audio file to read from
       * @throws IOException
      public ID3v11Tag(File audioFile) throws IOException {
        this(audioFile.getAbsolutePath());
       * get a string representation of this object
       * @return String
      public String toString() {
        DecimalFormat df = new DecimalFormat("00");
        return getArtist() + ", " + getAlbum() + " - " + df.format(getTrackNumber()) + " " + getTitle();
       * position to file pointer and read the tag
       * @param rf RandomAccessFile  the file to read from
       * @param jumpPos long  the position to jump to (the tag start position)
       * @throws IOException
      public void readTag(RandomAccessFile rf, long jumpPos) throws IOException {
        rf.seek(jumpPos);
        readTag(rf);
       * read the tag from a given file, assuming the file pointer to be at the tag start position
       * @param rf RandomAccessFile  the file to read from
       * @throws IOException
      public void readTag(RandomAccessFile rf) throws IOException {
        rf.read(tagBuf);
        if(tag.equalsIgnoreCase(new String(tagBuf))) {
          rf.read(title);
          rf.read(artist);
          rf.read(album);
          rf.read(year);
          rf.read(comment);
          rf.read(trackNo);
          rf.read(genre);
      public String getTitle() {
        return new String(title).trim();
      public String getArtist() {
        return new String(artist).trim();
      public String getAlbum() {
        return new String(album).trim();
      public String getYear() {
        return new String(year).trim();
      public String getComment() {
        return new String(comment).trim();
      public int getGenreId() {
        try {
          int id = new Byte(genre[0]).intValue();
          if(id < GENRE_ID_MIN || id > GENRE_ID_MAX) {
            return GENRE_ID_OTHER;
          else {
            return id;
        catch(Exception ex) {
          return GENRE_ID_OTHER;
      public String getGenreName() {
        return genreNames[getGenreId()];
      public int getTrackNumber() {
        try {
          return (int) trackNo[0];
        catch(Exception e) {
          return 0;
       * Compares this object with the specified object for order.
       * @param o the Object to be compared.
       * @return a negative integer, zero, or a positive integer as this object is less than, equal to,
       *                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    Hi Franck,
    thank you, mate. I did what you suggested (changed class attached) but that did not change the mentioned behaviour.
    The first run is approximately 75 seconds with Java option -Xms40m and approx. double without, the second run and all subsequent runs are only 2-3 seconds each (!!!) even when terminating and re-starting the application between thread runs.
    I'm pretty clueless about that, any more help on this anyone?
    Thanks a lot and best regards
    Ulrich
    PS: BTW, I forgot to post the class that is filled with data by class CollectionThread, so here it is
    * Light Development Playlist Editor
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.app.playlisteditor.data;
    import java.io.File;
    import com.lightdev.lib.audio.ID3v11Tag;
    import javax.sound.sampled.UnsupportedAudioFileException;
    import java.io.IOException;
    import java.io.Serializable;
    import com.lightdev.lib.audio.AudioFileDescriptor;
    import com.lightdev.lib.ui.SortListModel;
    import java.util.Iterator;
    * Storage model for audio data.
    * <p>
    * <code>AudioDataModel</code> can be used to store ID3 tag data collected from
    * a directory with audio files to perform queries and reports on the found data.
    * </p>
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software as well as any licensing notes
    *      inside this documentation
    * @version 1, October 15, 2004
    public class AudioDataModel extends SortListModel implements Serializable {
       * constructor
      public AudioDataModel() {
       * add an audio track from a given audio file
       * <p>This will attempt to read ID3 tag data from the file.</p>
       * @param audioFile File  the file to add audio data for
       * @throws IOException
      public void addTrack(File audioFile) throws IOException {
        AudioFileDescriptor afd = new AudioFileDescriptor(audioFile.getAbsolutePath());
        if (!data.contains(afd)) {
          data.add(afd);
       * get all tracks for agiven combination of genre name, artist name and album name. Any of
       * the parameters may be null or AudioDataModel.FILTER_ALL
       * <p>Ugly code, I know, but it simply hard codes all combinations of the the mentioned
       * parameters. Any more elegant implementations welcome.</p>
       * @param genreName String  a genre name to get tracks for
       * @param artistName String  an artist name to get tracks for
       * @param albumName String  an album name to get tracks for
       * @return SortListModel   the found tracks in a list model
      public SortListModel getTracks(String genreName, String artistName, String albumName) {
        SortListModel foundTracks = new SortListModel();
        Iterator e = data.iterator();
        while(e.hasNext()) {
          AudioFileDescriptor afd = (AudioFileDescriptor) e.next();
          ID3v11Tag tag = afd.getID3v11Tag();
          if(genreName == null || genreName.equalsIgnoreCase(FILTER_ALL)) {
            if(artistName == null || artistName.equalsIgnoreCase(FILTER_ALL)) {
              if (tag.getAlbum().equalsIgnoreCase(albumName))
                foundTracks.add(afd);
            else {
              if(albumName == null || albumName.equalsIgnoreCase(FILTER_ALL)) {
                if (tag.getArtist().equalsIgnoreCase(artistName))
                  foundTracks.add(afd);
              else {
                if (tag.getArtist().equalsIgnoreCase(artistName) &&
                    tag.getAlbum().equalsIgnoreCase(albumName))
                  foundTracks.add(afd);
          else {
            if(artistName == null || artistName.equalsIgnoreCase(FILTER_ALL)) {
              if(albumName == null || albumName.equalsIgnoreCase(FILTER_ALL)) {
                if (tag.getGenreName().equalsIgnoreCase(genreName))
                  foundTracks.add(afd);
              else {
                if (tag.getGenreName().equalsIgnoreCase(genreName) &&
                    tag.getAlbum().equalsIgnoreCase(albumName))
                  foundTracks.add(afd);
            else {
              if(albumName == null || albumName.equalsIgnoreCase(FILTER_ALL)) {
                if (tag.getGenreName().equalsIgnoreCase(genreName) &&
                    tag.getArtist().equalsIgnoreCase(artistName))
                  foundTracks.add(afd);
              else {
                if (tag.getGenreName().equalsIgnoreCase(genreName) &&
                    tag.getArtist().equalsIgnoreCase(artistName) &&
                    tag.getAlbum().equalsIgnoreCase(albumName))
                  foundTracks.add(afd);
        foundTracks.sort();
        return foundTracks;
       * list all artists in this model
       * @return SortListModel
      public SortListModel listArtists() {
        SortListModel artists = new SortListModel();
        artists.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String artistName = tag.getArtist();
          if (artists.indexOf(artistName) < 0) {
            artists.add(artistName);
        artists.sort();
        return artists;
       * list all artists in this model having titles belonging to a given genre
       * @param genreName String  name of the genre artists are searched for
       * @return SortListModel
      public SortListModel listArtists(String genreName) {
        SortListModel artists = new SortListModel();
        artists.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String artistName = tag.getArtist();
          String genre = tag.getGenreName();
          if (artists.indexOf(artistName) < 0 && genre.equalsIgnoreCase(genreName)) {
            artists.add(artistName);
        artists.sort();
        return artists;
       * list all genres in this model
       * @return SortListModel
      public SortListModel listGenres() {
        SortListModel genres = new SortListModel();
        genres.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String genreName = tag.getGenreName();
          if (genres.indexOf(genreName) < 0) {
            genres.add(genreName);
        genres.sort();
        return genres;
       * list all albums in this model
       * @return SortListModel
      public SortListModel listAlbums() {
        SortListModel albums = new SortListModel();
        albums.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String albumName = tag.getAlbum();
          if (albums.indexOf(albumName) < 0) {
            albums.add(albumName);
        albums.sort();
        return albums;
       * list all albums in this model having titles belonging to a given genre
       * @param genreName String  name of the genre albums are searched for
       * @return SortListModel
      public SortListModel listAlbums(String genreName) {
        SortListModel albums = new SortListModel();
        albums.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String albumName = tag.getAlbum();
          String genre = tag.getGenreName();
          if (albums.indexOf(albumName) < 0 && genre.equalsIgnoreCase(genreName)) {
            albums.add(albumName);
        albums.sort();
        return albums;
       * list all albums in this model having titles belonging to a given genre and artist
       * @param genreName String  name of the genre albums are searched for
       * @param artistName String  name of the artist albums are searched for
       * @return SortListModel
      public SortListModel listAlbums(String genreName, String artistName) {
        SortListModel albums = new SortListModel();
        albums.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String albumName = tag.getAlbum();
          String genre = tag.getGenreName();
          String artist = tag.getArtist();
          if(genreName == null || genreName.equalsIgnoreCase(FILTER_ALL)) {
            if (albums.indexOf(albumName) < 0 &&
                artist.equalsIgnoreCase(artistName))
              albums.add(albumName);
          else {
            if (albums.indexOf(albumName) < 0 &&
                genre.equalsIgnoreCase(genreName) &&
                artist.equalsIgnoreCase(artistName))
              albums.add(albumName);
        albums.sort();
        return albums;
       * get the number of audio tracks stored in this data model
       * @return int  the number of tracks
      public int getTrackCount() {
        return data.size();
      /** constant to select all items of a given part */
      public static final String FILTER_ALL = "    all";
    }...and here the changed CollectionThread now caching found File objects in a vector
    * Light Development Playlist Editor
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.app.playlisteditor.data;
    import com.lightdev.lib.util.InfoThread;
    import java.io.File;
    import java.util.Vector;
    import java.util.Enumeration;
    * A class to collect audio data from a given storage location.
    * <p>
    * <code>CollectionThread</code> uses ID3 tag information to gain data.
    * </p>
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software as well as any licensing notes
    *      inside this documentation
    * @version 1, October 13, 2004
    public class CollectionThread extends InfoThread {
       * constructor
       * @param model  AudioDataModel  the data model to collect data to
      public CollectionThread(AudioDataModel model) {
        this.model = model;
       * constructor, creates a new empty AudioDataModel
      public CollectionThread() {
        this(new AudioDataModel());
       * set the data model to collect data to
       * @param model AudioDataModel  the model to collect data to
      public void setModel(AudioDataModel model) {
        this.model = model;
       * get the data model associated to this thread
       * @return AudioDataModel  the data model
      public AudioDataModel getModel() {
        return model;
       * set the directory to collect data from
       * @param rootDir File  the directory to collect data from
      public void setRootDirectory(File rootDir) {
        this.rootDir = rootDir;
       * this is the method to prepare a thread to run.
      protected void prepareThread() {
        maxValue = -1;
        filesProcessed = 0;
        innerCount = 0;
        fileList = new Vector();
       * do the actual work of this thread, i.e. iterate through a given directory
       * structure and collect audio data
       * @return boolean  true, if work is left
      protected boolean work() {
        boolean workIsLeft = true;
        if(getStatus() < STATUS_HALT_PENDING) {
          countElements(rootDir.listFiles());
        if(getStatus() < STATUS_HALT_PENDING) {
          workIsLeft = collect(); //collect(rootDir.listFiles());
          fileList.clear();
          fileList = null;
        return workIsLeft;
       * count the elements in a given file array including its subdirectories
       * @param files File[]
      private void countElements(File[] files) {
        int i = 0;
        while (i < files.length && getStatus() < STATUS_HALT_PENDING) {
          File file = files;
    if (file.isDirectory()) {
    countElements(file.listFiles());
    else {
    fileList.add(file);
    i++;
    maxValue++;
    * read data into model
    * @param files File[] the file array representing the content of a given directory
    * @return boolean true, if work is left
    private boolean collect(/*File[] files*/) {
    Enumeration files = fileList.elements();
    while(files.hasMoreElements() && getStatus() < STATUS_HALT_PENDING) {
    File file = (File) files.nextElement();
    try {
    model.addTrack(file);
    catch(Exception e) {
    fireThreadException(e);
    filesProcessed++;
    if(++innerCount > 99) {
    innerCount = 0;
    fireThreadProgress(filesProcessed);
    return false;
    int i = 0;
    while(i < files.length && getStatus() < STATUS_HALT_PENDING) {
    File file = files[i];
    if(file.isDirectory()) {
    collect(file.listFiles());
    else if(file.getName().toLowerCase().endsWith("mp3")) {
    try {
    model.addTrack(file);
    catch(Exception e) {
    fireThreadException(e);
    i++;
    filesProcessed++;
    fireThreadProgress(filesProcessed);
    return (i<files.length);
    /** the directory to collect data from */
    private File rootDir;
    /** the data model to collect data to */
    private AudioDataModel model;
    /** the number of files this thread processed so far while it is running */
    private long filesProcessed = 0;
    /** a list to temporary store found files */
    private Vector fileList;
    /** counter to determine when to fire progress messages */
    private int innerCount = 0;

  • I need your help with a decision to use iPhoto.  I have been a PC user since the mid 1980's and more recently have used ACDSee to manage my photo images and Photoshop to edit them.  I have used ProShow Gold to create slideshows.  I am comfortable with my

    I need your help with a decision to use iPhoto.  I have been a PC user since the mid 1980’s and more recently have used ACDSee to manage my photo images and Photoshop to edit them.  I have used ProShow Gold to create slideshows.  I am comfortable with my own folder and file naming conventions. I currently have over 23,000 images of which around 60% are scans going back 75 years.  Since I keep a copy of the originals, the storage requirements for over 46,000 images is huge.  180GB plus.
    I now have a Macbook Pro and will add an iMac when the new models arrive.  For my photos, I want to stay with Photoshop which also gives me the Bridge.  The only obvious reason to use iPhoto is to take advantage of Faces and the link to iMovie to make slideshows.  What am I missing and is using iPhoto worth the effort?
    If I choose to use iPhoto, I am not certain whether I need to load the originals and the edited versions. I suspect that just the latter is sufficient.  If I set PhotoShop as my external editor, I presume that iPhoto will keep track of all changes moving forward.  However, over 23,000 images in iPhoto makes me twitchy and they are appear hidden within iPhoto.  In the past, I have experienced syncing problems with, and database errors in, large databases.  If I break up the images into a number of projects, I loose the value of Faces reaching back over time.
    Some guidance and insight would be appreciated.  I have a number of Faces questions which I will save for later. 

    Bridge and Photoshop is a common file-based management system. (Not sure why you'd have used ACDSEE as well as Bridge.) In any event, it's on the way out. You won't be using it in 5 years time.
    Up to this the lack of processing power on your computer left no choice but to organise this way. But file based organisation is as sensible as organising a Shoe Warehouse based on the colour of the boxes. It's also ultimately data-destructive.
    Modern systems are Database driven. Files are managed, Images imported, virtual versions, lossless processing and unlimited editing are the way forward.
    For a Photographer Photoshop is overkill. It's an enormously powerful app, a staple of the Graphic Designers' trade. A Photographer uses maybe 15% to 20% of its capability.
    Apps like iPhoto, Lightroom, Aperture are the way forward - for photographers. There's the 20% of Photoshop that shooters actually use, coupled with management and lossless processing. Pop over to the Aperture or Lightroom forums (on the Adobe site) and one comment shows up over and over again... "Since I started using Aperture/ Lightroom I hardly ever use Photoshop any more..." and if there is a job that these apps can do, then the (much) cheaper Elements will do it.
    The change is not easy though, especially if you have a long-standing and well thought out filing system of your own. The first thing I would strongly advise is that you experiment before making any decisions. So I would create a Library, import 300 or 400 shots and play. You might as well do this in iPhoto to begin with - though if you’re a serious hobbyist or a Pro then you'll find yourself looking further afield pretty soon. iPhoto is good for the family snapper, taking shots at birthdays and sharing them with friends and family.
    Next: If you're going to successfully use these apps you need to make a leap: Your files are not your Photos.
    The illustration I use is as follows: In my iTunes Library I have a file called 'Let_it_Be_The_Beatles.mp3'. So what is that, exactly? It's not the song. The Beatles never wrote an mp3. They wrote a tune and lyrics. They recorded it and a copy of that recording is stored in the mp3 file. So the file is just a container for the recording. That container is designed in a specific way attuned to the characteristics and requirements of the data. Hence, mp3.
    Similarly, that Jpeg is not your photo, it's a container designed to hold that kind of data. iPhoto is all about the data and not about the container. So, regardless of where you choose to store the file, iPhoto will manage the photo, edit the photo, add metadata to the Photo but never touch the file. If you choose to export - unless you specifically choose to export the original - iPhoto will export the Photo into a new container - a new file containing the photo.
    When you process an image in iPhoto the file is never touched, instead your decisions are recorded in the database. When you view the image then the Master is presented with these decisions applied to it. That's why it's lossless. You can also have multiple versions and waste no disk space because they are all just listings in the database.
    These apps replace the Finder (File Browser) for managing your Photos. They become the Go-To app for anything to do with your photos. They replace Bridge too as they become a front-end for Photoshop.
    So, want to use a photo for something - Export it. Choose the format, size and quality you want and there it is. If you're emailing, uploading to websites then these apps have a "good enough for most things" version called the Preview - this will be missing some metadata.
    So it's a big change from a file-based to Photo-based management, from editing files to processing Photos and it's worth thinking it through before you decide.

Maybe you are looking for