PSA to anyone considering purchasing a PhpStorm licence:

As on November 2, 2015, JetBrains (the company who makes PhpStorm) will no longer be offering perpetual licences and will be moving over to a subscription-based licencing scheme. Link to the announcement.

A quick perusal of the comments shows that the reaction to this news has been overwhelmingly negative. Like, I don't remember seeing such a negative reaction to something like this since the release fiasco of Diablo III or the new SimCity. Most people are pissed. I can't say I blame them. I guess I am one of the "lucky" ones since I own a perpetual licence, but anyone who wants to start using the software (legally) after November 2, 2015 will be locked in to their subscription. If you are unable to connect to the Internet after 30 days to verify your subscription the application will shut down.

What are your guys' thoughts on this? I assume those here who already use it have a perpetual licence so you're okay like me because we can always fall back to it.

    A negative reaction is only natural: these developer tools are more product than service, therefore people expect to pay for a product that they can use until the changing software ecosystem makes the tool unusable (whether because of complementary software upgrades, or simply because newer tools are too superior to ignore). The services provided are the product upgrades and customer support, hence a licensing model that charges for access to upgrades and premium support sounds more reasonable than monthly subscription with no product at all if one does not renew subscription.

      Exactly. What you wrote was basically what others have been saying in the comments. Developers are expecting a product, not a service. I am wondering if a decent compromise would be to offer the option of the perpetual licence for individuals but organizations would be required to go with the subscription.

      As one person stated it seemed like they had the best model already: pay a larger upfront cost to obtain the software and some included upgrades, then pay a reduced amount as long as support and updates are desired. If support or updates are not desired then you can continue to use the software at the version your licence expired. Seems like everyone except for JetBrains likes that model.

      It's comforting to know I have a perpetual licence but makes it really hard to keep advocating the software to others. Pretty disappointed.

        Oh.. a shame.. it makes sense for a company's cash flow, but if sales drop off, it's self defeating.
        I thought Adobe had found the subscription thing a struggle, but they can't back down on it - and they own the market in several sectors, while JetBrains have lots of competition.

        The problem is for casual users.. I use Photoshop a few hours each month at most, so can't justify upgrading to a subscription version - my antique does all I need - but there will come a time when it won't install on the next computer.. so then I guess I will learn Gimp. Maybe JetBrains don't think that scenario will affect them, as the price is lower.

          JetBrains.com wrote:

          $ 49 /year for existing users**

          That is the same as I already pay every year to renew my perpetual license... I don't see the difference or why it matters 😛

            Derokorian;11050601 wrote:

            That is the same as I already pay every year to renew my perpetual license... I don't see the difference or why it matters 😛

            It matters for two reasons:

            1) While I think this his been debunked, it's rather ambiguous if your perpetual licence is actually perpetual once you "switch" to the new licencing scheme. From the "Full details" link at the bottom of the pricing page:

            JetBrains wrote:

            1. The offer is available to customers with or without upgrade subscriptions regardless of the subscription status, provided a customer switches their existing licenses to the new model before January 1, 2017

            JetBrains wrote:

            2. The offer only applies to switching existing licenses to the new model. Purchases for additional users will fall under the standard pricing

            I don't know about you, but when I read the word "switch" in this type of context it sounds like "change". Also, to be fair, there is this under their FAQ:

            JetBrains wrote:

            No. Any licenses purchased before November 2, 2015, remain valid and will continue working indefinitely according to the corresponding license terms.

            Again, I think this has been debunked but I am not 100% sure. In any case it's confusing, which is ironic because this new model was supposed to be easy to understand, though I am not sure what's easier to understand than "make one payment and you can use the software forever".

            2) If your payments lapse for any reason you lose your discount and it goes back up to $79, and that is a promotional offer which ends January 31, 2016 (only a few months away), otherwise it goes back up to $99.

            JetBrains wrote:

            3. Once the offer is used, the special price is available indefinitely until payments are canceled or paused.

            So just make sure you don't stop giving them money, otherwise you might have to give them more money in the future.

            However, undoubtedly due to the overwhelming amount of backlash they have received, they are "listening". Sounds like they are going to revise it and let us know what that is sometime next week. Stay tuned!

            EDIT: And really, 3) you shouldn't have to rent desktop software, especially software that was perfectly fine on perpetual licences a few days ago. Most people are not upset about the cost (except WebStorm users - that doubled I think); it's the lack of ownership and control.

              Bonesnap wrote:

              I don't know about you, but when I read the word "switch" in this type of context it sounds like "change"

              Well, if you're not changing then you're not going to be purchasing a new license, in which case there wouldn't be anything for the offered discount to apply to.

                Weedpacket;11050625 wrote:

                Well, if you're not changing then you're not going to be purchasing a new license, in which case there wouldn't be anything for the offered discount to apply to.

                True, you could just not do anything and stick with what you have, but at some point your hand might be forced because newer versions will contain bug fixes and feature updates - some that you may require. You can either bite the bullet and switch over, or find alternative software. Chances are I'll probably be okay for a long, long time, but it's still annoying (it's also a crap move to your loyal fan base). I personally like to keep up with the latest versions of software, but not at the cost of ownership.

                According to their blog, 9.5 will be released by the end of this year. I am sure they will release 10 by the time my upgrade subscription expires, but then I don't get anymore updates, including bug fixes. Kinda annoying, don't you think?

                  Oh well, by this time next year there's a high probability I'll be working in Ruby/Rails ( :xbones: ) so it won't matter much.

                    [ATTACH]5243[/ATTACH]

                    ed1-is-the-standard-text-editor1.jpg
                      NogDog;11050685 wrote:

                      Oh well, by this time next year there's a high probability I'll be working in Ruby/Rails ( :xbones: ) so it won't matter much.

                      But don't you want to subscribe to use RubyMine? :p

                        laserlight;11050699 wrote:

                        But don't you want to subscribe to use RubyMine? :p

                        I'll probably use whatever the other Ruby devs are using, assuming there is, in fact any sort of consensus here. Wait, what am I thinking: a consensus among programmers?

                          4 days later

                          Quick change of pace while we wait for the JetBrains gods to clean up their mess.

                          Has anyone run into any issues with code completion when method chaining? I haven't had much time lately to work on my project but I decided to revisit it the other day briefly and noticed that while the code works, PhpStorm has issues offering code completion. I have the following line:

                          $result = $db->prepare($query)->bind_parameters($parameters)->execute()->fetch_result();

                          PhpStorm highlights the "bind_parameters" and says it can't find it.

                          I did some Googling and found some old posts way back where people were doing some deep inheritance and whatnot (which also was supposed to be addressed in later versions of PhpStorm), but I am only implementing a single interface and that's it.

                          Anyway, some of the suggestions were to try changing the @return of the docs of the methods to @return $this or @return self. I already have them set to @return Mysqli_Database which is the name of the class. Regardless, none of those change the outcome. Then I thought... what about the interface itself? So I went to my interface and added @return self to the methods and voila - I now have code completion!

                          Except... now it complains that the parameter for fetch_result() is missing. But in my class' definition I have a default value:

                          public function fetch_result($return_type=ARRAY_A)
                          {
                              //code
                          }		
                          

                          The definition in the interface:

                          function fetch_result($return_type);
                          

                          If I add in the parameter the highlighting goes away:

                          $result = $db->prepare($query)->bind_parameters($parameters)->execute()->fetch_result(ARRAY_A);
                          

                          Also removing the $return_type from the interface definition makes the highlighting go away, too. Is that a good idea? My thoughts are to keep it as the interface is telling any classes implementing it that function needs to tell the application how to return the result.

                          Any thoughts?

                            The problem is you are type hinting an interface that is defined to say that an argument is required to fetch_result. The IDE has no idea that you're using an implementation that no longer requires it, unless you type hint it that way. The point of an interface is to say "No matter how this is implemented, this definition is exactly how the implementing class should look publicly" but you are then building an implementation that says "Nah I'm going to do it my way damnit". The solution is to define the interface as having that argument be optional, or not design your implementation to have different function signatures.

                            For example, here is my DataInterface, and all the type hinting and code completion works, because these are the exact method signatures the implementing classes use as well.

                            <?php
                            
                            namespace Dero\Data;
                            
                            /**
                             * Contract to define what should be available to all data interface classes
                             * @author Ryan Pallas
                             */
                            interface DataInterface
                            {
                                /**
                                 * Prepares a query for execution
                                 * @param string $Query
                                 * @return DataInterface
                                 */
                                public function Prepare($Query);
                            
                            /**
                             * Executes a query directly
                             * @param string $Query
                             * @return DataInterface
                             */
                            public function Query($Query);
                            
                            /**
                             * Binds a collection of parameters to a prepared query
                             * @param ParameterCollection $Params
                             * @return DataInterface
                             */
                            public function BindParams(ParameterCollection $Params);
                            
                            /**
                             * Binds a single parameter to a prepared query
                             * @param Parameter $Param
                             * @return DataInterface
                             */
                            public function BindParam(Parameter $Param);
                            
                            /**
                             * Executes a prepared query
                             * @return DataInterface
                             */
                            public function Execute();
                            
                            /**
                             * Gets a single row from a result set
                             * @param string|object $mClass
                             */
                            public function Get($mClass = null);
                            
                            /**
                             * Gets all rows in a result set
                             * @param string $strClass
                             */
                            public function GetAll($strClass = null);
                            
                            /**
                             * Gets a singular value from the first row and column
                             */
                            public function GetScalar();
                            }
                            

                            Notice Get and GetAll have optional arguments, its up to the implementing class how to make them optional.

                              Does PHP Storm give you a live editable preview where you can edit css and html and see changes instantly?
                              I'm sick of "make change in HTML/CSS, click browser, hit refresh, go back to editor.. repeat".

                              I spend half my time bludgeoning css and html (easily the least enjoyable part of this job..) and while Web Developer for FF, Chrome dev tools and the Chrome CSS Viewer plug-in are all useful, I was thinking a live linked wysiwyg editor would be good.
                              [Um .. sounds like Dreamweaver]

                              And if this means two editors, one for the styled view and one for the PHP, then so be it.

                              Anyway I downloaded Brackets, but from first attempts it won't perfom satisfactorily on a localhost set up that is not in the Brackets root - and it's built primarily for HTML not PHP. Haven't tried Atom yet.

                              So is there any way to do this with a PHP project, where everything is run from an index.php file?
                              Am I making sense?

                                So still no word from JetBrains, but I have noticed they've silently removed all mentions of the toolbox from their website and reverted back to what they had before the announcement, so that's interesting. I wonder if they're going to ditch it entirely.

                                Derokorian;11050779 wrote:

                                The problem is you are type hinting an interface that is defined to say that an argument is required to fetch_result. The IDE has no idea that you're using an implementation that no longer requires it, unless you type hint it that way. The point of an interface is to say "No matter how this is implemented, this definition is exactly how the implementing class should look publicly" but you are then building an implementation that says "Nah I'm going to do it my way damnit". The solution is to define the interface as having that argument be optional, or not design your implementation to have different function signatures.

                                Thank you, that did the trick. I guess having a default value in the class implementation isn't explicit enough.

                                cretaceous;11050793 wrote:

                                Does PHP Storm give you a live editable preview where you can edit css and html and see changes instantly?
                                I'm sick of "make change in HTML/CSS, click browser, hit refresh, go back to editor.. repeat".

                                I spend half my time bludgeoning css and html (easily the least enjoyable part of this job..) and while Web Developer for FF, Chrome dev tools and the Chrome CSS Viewer plug-in are all useful, I was thinking a live linked wysiwyg editor would be good.
                                [Um .. sounds like Dreamweaver]

                                And if this means two editors, one for the styled view and one for the PHP, then so be it.

                                Anyway I downloaded Brackets, but from first attempts it won't perfom satisfactorily on a localhost set up that is not in the Brackets root - and it's built primarily for HTML not PHP. Haven't tried Atom yet.

                                So is there any way to do this with a PHP project, where everything is run from an index.php file?
                                Am I making sense?

                                Yes, but you have to enable a bundled plugin called LiveEdit. Here is a video where they show it in action (and enabling the plugin).

                                  There's a slightly tweaked subscription plan now - you get a perpetual license to the previous version if you stop subscribing.
                                  Still seems complicated as if someone has spent too long with too much coffee.

                                    5 days later

                                    As cretaceous noted, the terms have been updated with a compromise. For every 12 moths of continuous subscription you get a perpetual licence for the version you started with (of those 12 months). Also I believe there are similar "penalties" as before if you stop subscribing and then start again, as in the price increases, but I'd have to check again to confirm. Basically, the best time to purchase a perpetual licence is now (or before November 2) since they will cease offering the current perpetual licences.

                                    I have mixed feelings about their compromise. I suppose it's the best compromise between their old system and the new one they proposed, but their old one was optimal in my opinion; however, they stated it was unsustainable, so who knows. Something tells me though that they're full of it.

                                    I'm just glad they listened instead of simply ignoring their user base (I'm looking at you, Adobe).

                                      Write a Reply...