Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Who is using WPF ?

Who is using WPF ?

Scheduled Pinned Locked Moved The Lounge
helpcsharpquestionc++database
17 Posts 14 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Marc Clifton

    Christian Graus wrote:

    It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

    Yeah, and I don't see this improving as frameworks get more and more complex yet coding is still constrained by people, budgets, and marketing deadlines. And the reality is, mixing declarative and imperative code is not as trivial as we have been led to believe. I should know, as I've created some rather unwieldy architectures myself and when I look at WPF, I can only shake my head in dismay. Some of the things I see there are definitely things that I've learned to avoid. Well, not avoid, but here's a thought--if separation of concerns is an important thing in the imperative world, it is a critical thing in the declarative world, and looking at WPF, all I see is entanglements upon entanglements. Not a pretty sight.

    Christian Graus wrote:

    I doubt the lounge can

    So, I'm curious--is there an event handler on MinHeight that's firing when you change that property? Marc

    Thyme In The Country Interacx My Blog

    C Offline
    C Offline
    Christian Graus
    wrote on last edited by
    #3

    No, I don't believe there's an event firing. I've learned to do as much as I can in code, it's just easier to read and easier to control.

    Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

    P G 2 Replies Last reply
    0
    • C Christian Graus

      I spent the past year writing a WPF project, which is now live and in the marketplace. WPF does some cool stuff, but it has it's fair share of issues. The most frustrating thing for me is when we hit a showstopper, and I ask a question ( specifically on the MSDN forums, although I am asking in the CP WPF forums now too ), generally, it takes a couple of weeks for the question to go stale and then someone from MS to answer, so we often get into situations where, for example, WPF can't read a photograph from a jpg and resize it without destroying the image ( I believe this bug is still present in .NET 3.5, we get around it by using GDI+ to load images ). My current bug is interesting. Out of the blue, we get an intermittent error: Not enough quota is available to process this command. I tracked it down to this line of code: Application.Current.MainWindow.MinHeight = ActualHeight + 100; Despite being in a try/catch, this line crashes the program regularly. It's been there from day one, but the problem is new. I've removed the line, perhaps in a few weeks I'll have an idea of how this can crash the program. No, this is not a programming question - if the MSDN WPF forum can't help me, I doubt the lounge can. It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

      Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

      L Offline
      L Offline
      leppie
      wrote on last edited by
      #4

      Christian Graus wrote:

      Application.Current.MainWindow.MinHeight = ActualHeight + 100;

      Lines like that has thrown me off by accidentally leaving optimization on. In my case it was ASP.NET, and the real line was about 100 lines off the noted line. Make sure optimization is off. :)

      xacc.ide - now with IronScheme support
      IronScheme - 1.0 alpha 1 out now

      1 Reply Last reply
      0
      • C Christian Graus

        I spent the past year writing a WPF project, which is now live and in the marketplace. WPF does some cool stuff, but it has it's fair share of issues. The most frustrating thing for me is when we hit a showstopper, and I ask a question ( specifically on the MSDN forums, although I am asking in the CP WPF forums now too ), generally, it takes a couple of weeks for the question to go stale and then someone from MS to answer, so we often get into situations where, for example, WPF can't read a photograph from a jpg and resize it without destroying the image ( I believe this bug is still present in .NET 3.5, we get around it by using GDI+ to load images ). My current bug is interesting. Out of the blue, we get an intermittent error: Not enough quota is available to process this command. I tracked it down to this line of code: Application.Current.MainWindow.MinHeight = ActualHeight + 100; Despite being in a try/catch, this line crashes the program regularly. It's been there from day one, but the problem is new. I've removed the line, perhaps in a few weeks I'll have an idea of how this can crash the program. No, this is not a programming question - if the MSDN WPF forum can't help me, I doubt the lounge can. It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

        Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

        M Offline
        M Offline
        martin_hughes
        wrote on last edited by
        #5

        I'm not - but just because the tooling support sucks.

        1 Reply Last reply
        0
        • C Christian Graus

          I spent the past year writing a WPF project, which is now live and in the marketplace. WPF does some cool stuff, but it has it's fair share of issues. The most frustrating thing for me is when we hit a showstopper, and I ask a question ( specifically on the MSDN forums, although I am asking in the CP WPF forums now too ), generally, it takes a couple of weeks for the question to go stale and then someone from MS to answer, so we often get into situations where, for example, WPF can't read a photograph from a jpg and resize it without destroying the image ( I believe this bug is still present in .NET 3.5, we get around it by using GDI+ to load images ). My current bug is interesting. Out of the blue, we get an intermittent error: Not enough quota is available to process this command. I tracked it down to this line of code: Application.Current.MainWindow.MinHeight = ActualHeight + 100; Despite being in a try/catch, this line crashes the program regularly. It's been there from day one, but the problem is new. I've removed the line, perhaps in a few weeks I'll have an idea of how this can crash the program. No, this is not a programming question - if the MSDN WPF forum can't help me, I doubt the lounge can. It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

          Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

          C Offline
          C Offline
          Chris Meech
          wrote on last edited by
          #6

          How does Trailblazer sound. :)

          Chris Meech I am Canadian. [heard in a local bar] Donate to help Conquer Cancer[^]

          C 1 Reply Last reply
          0
          • M Marc Clifton

            Christian Graus wrote:

            It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

            Yeah, and I don't see this improving as frameworks get more and more complex yet coding is still constrained by people, budgets, and marketing deadlines. And the reality is, mixing declarative and imperative code is not as trivial as we have been led to believe. I should know, as I've created some rather unwieldy architectures myself and when I look at WPF, I can only shake my head in dismay. Some of the things I see there are definitely things that I've learned to avoid. Well, not avoid, but here's a thought--if separation of concerns is an important thing in the imperative world, it is a critical thing in the declarative world, and looking at WPF, all I see is entanglements upon entanglements. Not a pretty sight.

            Christian Graus wrote:

            I doubt the lounge can

            So, I'm curious--is there an event handler on MinHeight that's firing when you change that property? Marc

            Thyme In The Country Interacx My Blog

            C Offline
            C Offline
            Christopher Duncan
            wrote on last edited by
            #7

            Marc Clifton wrote:

            if separation of concerns is an important thing in the imperative world, it is a critical thing in the declarative world, and looking at WPF, all I see is entanglements upon entanglements. Not a pretty sight.

            I haven't delved into WPF, but for some reason this immediately invoked visions (or nightmares, if you will) of the original / "classic" ASP stuff.

            Christopher Duncan Author of The Career Programmer and Unite the Tribes Coming soon: Got a career question? Ask the Attack Chihuahua! www.PracticalUSA.com

            1 Reply Last reply
            0
            • C Chris Meech

              How does Trailblazer sound. :)

              Chris Meech I am Canadian. [heard in a local bar] Donate to help Conquer Cancer[^]

              C Offline
              C Offline
              Christopher Duncan
              wrote on last edited by
              #8

              Surprisingly similar to Stationary Target. :-D

              Christopher Duncan Author of The Career Programmer and Unite the Tribes Coming soon: Got a career question? Ask the Attack Chihuahua! www.PracticalUSA.com

              1 Reply Last reply
              0
              • C Christian Graus

                No, I don't believe there's an event firing. I've learned to do as much as I can in code, it's just easier to read and easier to control.

                Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

                P Offline
                P Offline
                Patrick Etc
                wrote on last edited by
                #9

                Christian Graus wrote:

                No, I don't believe there's an event firing.

                Hah! Without spending an entire day examining the assemblies in Reflector, you can't know that. Just because you're not handling the event, doesn't mean the event isn't being routed elsewhere in the framework, it just dead ends because you don't handle it (since almost all events are routed in WPF - the internal routing is probably still set up even if you don't add a handler). I could be wrong, though. Josh Smith might have a better answer. Where's he been, anyway? Ah, huge, obfuscated frameworks... gotta love 'em.


                It has become appallingly obvious that our technology has exceeded our humanity. - Albert Einstein

                1 Reply Last reply
                0
                • C Christian Graus

                  I spent the past year writing a WPF project, which is now live and in the marketplace. WPF does some cool stuff, but it has it's fair share of issues. The most frustrating thing for me is when we hit a showstopper, and I ask a question ( specifically on the MSDN forums, although I am asking in the CP WPF forums now too ), generally, it takes a couple of weeks for the question to go stale and then someone from MS to answer, so we often get into situations where, for example, WPF can't read a photograph from a jpg and resize it without destroying the image ( I believe this bug is still present in .NET 3.5, we get around it by using GDI+ to load images ). My current bug is interesting. Out of the blue, we get an intermittent error: Not enough quota is available to process this command. I tracked it down to this line of code: Application.Current.MainWindow.MinHeight = ActualHeight + 100; Despite being in a try/catch, this line crashes the program regularly. It's been there from day one, but the problem is new. I've removed the line, perhaps in a few weeks I'll have an idea of how this can crash the program. No, this is not a programming question - if the MSDN WPF forum can't help me, I doubt the lounge can. It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

                  Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

                  L Offline
                  L Offline
                  Lost User
                  wrote on last edited by
                  #10

                  As per the strange error - are you positive that ActualHeight is not ever negative? Imagine if Actualheight was -100 for some strange reason....? Maybe Max( 0, ActualHeight ) + 100 would be safer? Rene Pilon

                  1 Reply Last reply
                  0
                  • C Christian Graus

                    I spent the past year writing a WPF project, which is now live and in the marketplace. WPF does some cool stuff, but it has it's fair share of issues. The most frustrating thing for me is when we hit a showstopper, and I ask a question ( specifically on the MSDN forums, although I am asking in the CP WPF forums now too ), generally, it takes a couple of weeks for the question to go stale and then someone from MS to answer, so we often get into situations where, for example, WPF can't read a photograph from a jpg and resize it without destroying the image ( I believe this bug is still present in .NET 3.5, we get around it by using GDI+ to load images ). My current bug is interesting. Out of the blue, we get an intermittent error: Not enough quota is available to process this command. I tracked it down to this line of code: Application.Current.MainWindow.MinHeight = ActualHeight + 100; Despite being in a try/catch, this line crashes the program regularly. It's been there from day one, but the problem is new. I've removed the line, perhaps in a few weeks I'll have an idea of how this can crash the program. No, this is not a programming question - if the MSDN WPF forum can't help me, I doubt the lounge can. It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

                    Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

                    C Offline
                    C Offline
                    cwp42
                    wrote on last edited by
                    #11

                    They are using WPF: Karl Shifflett http://karlshifflett.wordpress.com/ Josh Smith http://joshsmithonwpf.wordpress.com/ Tor Langlo http://www.kodasoftware.com/

                    Christian Paproth

                    1 Reply Last reply
                    0
                    • C Christian Graus

                      I spent the past year writing a WPF project, which is now live and in the marketplace. WPF does some cool stuff, but it has it's fair share of issues. The most frustrating thing for me is when we hit a showstopper, and I ask a question ( specifically on the MSDN forums, although I am asking in the CP WPF forums now too ), generally, it takes a couple of weeks for the question to go stale and then someone from MS to answer, so we often get into situations where, for example, WPF can't read a photograph from a jpg and resize it without destroying the image ( I believe this bug is still present in .NET 3.5, we get around it by using GDI+ to load images ). My current bug is interesting. Out of the blue, we get an intermittent error: Not enough quota is available to process this command. I tracked it down to this line of code: Application.Current.MainWindow.MinHeight = ActualHeight + 100; Despite being in a try/catch, this line crashes the program regularly. It's been there from day one, but the problem is new. I've removed the line, perhaps in a few weeks I'll have an idea of how this can crash the program. No, this is not a programming question - if the MSDN WPF forum can't help me, I doubt the lounge can. It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

                      Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

                      J Offline
                      J Offline
                      JDL EPM
                      wrote on last edited by
                      #12

                      I went on a WPF course recently and the instructor said, "Remember that the 'F' in 'WPF' stands for 'Foundation', as in 'Beginning', as in 'here's our first attempt'. It will (probably) get better." :laugh:

                      1 Reply Last reply
                      0
                      • C Christian Graus

                        I spent the past year writing a WPF project, which is now live and in the marketplace. WPF does some cool stuff, but it has it's fair share of issues. The most frustrating thing for me is when we hit a showstopper, and I ask a question ( specifically on the MSDN forums, although I am asking in the CP WPF forums now too ), generally, it takes a couple of weeks for the question to go stale and then someone from MS to answer, so we often get into situations where, for example, WPF can't read a photograph from a jpg and resize it without destroying the image ( I believe this bug is still present in .NET 3.5, we get around it by using GDI+ to load images ). My current bug is interesting. Out of the blue, we get an intermittent error: Not enough quota is available to process this command. I tracked it down to this line of code: Application.Current.MainWindow.MinHeight = ActualHeight + 100; Despite being in a try/catch, this line crashes the program regularly. It's been there from day one, but the problem is new. I've removed the line, perhaps in a few weeks I'll have an idea of how this can crash the program. No, this is not a programming question - if the MSDN WPF forum can't help me, I doubt the lounge can. It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

                        Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

                        L Offline
                        L Offline
                        Lost User
                        wrote on last edited by
                        #13

                        Christian, To answer the question, I'm using WPF for a new huge business application. I love it. Challenges, some. But all technologies have challanges, so... I found your question in the new WPF forum and am responding there.

                        Cheers, Karl My Blog | Mole's Home Page | How To Create Screen Capture Videos For Your Articles

                        Just a grain of sand on the worlds beaches.

                        1 Reply Last reply
                        0
                        • C Christian Graus

                          No, I don't believe there's an event firing. I've learned to do as much as I can in code, it's just easier to read and easier to control.

                          Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

                          G Offline
                          G Offline
                          Grimolfr
                          wrote on last edited by
                          #14

                          It seems to me that if you set .MinHeight to a value greater than .Height, it might trigger an automatic resizing of the control/object.

                          Grim (aka Toby) MCDBA, MCSD, MCP+SB SELECT * FROM users WHERE clue IS NOT NULL (0 row(s) affected)

                          1 Reply Last reply
                          0
                          • C Christian Graus

                            I spent the past year writing a WPF project, which is now live and in the marketplace. WPF does some cool stuff, but it has it's fair share of issues. The most frustrating thing for me is when we hit a showstopper, and I ask a question ( specifically on the MSDN forums, although I am asking in the CP WPF forums now too ), generally, it takes a couple of weeks for the question to go stale and then someone from MS to answer, so we often get into situations where, for example, WPF can't read a photograph from a jpg and resize it without destroying the image ( I believe this bug is still present in .NET 3.5, we get around it by using GDI+ to load images ). My current bug is interesting. Out of the blue, we get an intermittent error: Not enough quota is available to process this command. I tracked it down to this line of code: Application.Current.MainWindow.MinHeight = ActualHeight + 100; Despite being in a try/catch, this line crashes the program regularly. It's been there from day one, but the problem is new. I've removed the line, perhaps in a few weeks I'll have an idea of how this can crash the program. No, this is not a programming question - if the MSDN WPF forum can't help me, I doubt the lounge can. It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

                            Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

                            W Offline
                            W Offline
                            WareFore
                            wrote on last edited by
                            #15

                            I cannot consider WPF, as yet another step in .NET obscurity, for my application-development toolset. I got burned by VS2005 when I wrote a Windows-desktop version of a commercial application for Life Compass™ Cards (www.lifecompasscards.com), then tried to beta-test it among my target audience. Nobody had ever heard of .NET nor did they have it installed on their Windows PCs, even XP, so when the application download (not ClickOnce as it takes too much effort, if at all, on a non-corporate audience) took them to the scary Microsoft geek-speak web-page to download 38MB of code, they panicked & cancelled. Come to discover that despite promises of ubiquity starting in 2000, Microsoft did not generally distribute .NET Framework till Vista, so any install to over 80% of the Windows marketplace comes with an additional, huge download. So, I'm looking to rewrite in something open-source. Got any suggestions?

                            A 1 Reply Last reply
                            0
                            • W WareFore

                              I cannot consider WPF, as yet another step in .NET obscurity, for my application-development toolset. I got burned by VS2005 when I wrote a Windows-desktop version of a commercial application for Life Compass™ Cards (www.lifecompasscards.com), then tried to beta-test it among my target audience. Nobody had ever heard of .NET nor did they have it installed on their Windows PCs, even XP, so when the application download (not ClickOnce as it takes too much effort, if at all, on a non-corporate audience) took them to the scary Microsoft geek-speak web-page to download 38MB of code, they panicked & cancelled. Come to discover that despite promises of ubiquity starting in 2000, Microsoft did not generally distribute .NET Framework till Vista, so any install to over 80% of the Windows marketplace comes with an additional, huge download. So, I'm looking to rewrite in something open-source. Got any suggestions?

                              A Offline
                              A Offline
                              azonenberg
                              wrote on last edited by
                              #16

                              I've never used .NET and have no plans to do so unless forced to by an employer. Native C++ is the way to go.

                              1 Reply Last reply
                              0
                              • C Christian Graus

                                I spent the past year writing a WPF project, which is now live and in the marketplace. WPF does some cool stuff, but it has it's fair share of issues. The most frustrating thing for me is when we hit a showstopper, and I ask a question ( specifically on the MSDN forums, although I am asking in the CP WPF forums now too ), generally, it takes a couple of weeks for the question to go stale and then someone from MS to answer, so we often get into situations where, for example, WPF can't read a photograph from a jpg and resize it without destroying the image ( I believe this bug is still present in .NET 3.5, we get around it by using GDI+ to load images ). My current bug is interesting. Out of the blue, we get an intermittent error: Not enough quota is available to process this command. I tracked it down to this line of code: Application.Current.MainWindow.MinHeight = ActualHeight + 100; Despite being in a try/catch, this line crashes the program regularly. It's been there from day one, but the problem is new. I've removed the line, perhaps in a few weeks I'll have an idea of how this can crash the program. No, this is not a programming question - if the MSDN WPF forum can't help me, I doubt the lounge can. It's meant to be a trigger for 'what a weird error' or 'gosh it's hard trying to work with new frameworks, because you're the one finding the weird bugs' type discussions.

                                Christian Graus - Microsoft MVP - C++ "also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )

                                B Offline
                                B Offline
                                Bob1000
                                wrote on last edited by
                                #17

                                Think the old adage sums it up 'You can always tell a Pioneer – they are the guys with arrows in their backs ..'

                                1 Reply Last reply
                                0
                                Reply
                                • Reply as topic
                                Log in to reply
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes


                                • Login

                                • Don't have an account? Register

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • World
                                • Users
                                • Groups