Forum Replies Created

Viewing 15 replies - 106 through 120 (of 150 total)
  • Thread Starter Magenta Cuda

    (@magenta-cuda)

    But, there are some disadvantages to consider – this essentially creates another product with its own web-page – its own forums. Still it may be nice to have NextGen Gallery Classic around for a while. Should have mentioned this in my original post.

    Thread Starter Magenta Cuda

    (@magenta-cuda)

    Alex I know you are angry but I am also angry. And just as you want people to understand your anger I want you to understand mine.

    The critical fact here is how many users are having major problems with 2.0.7. You think it is some/many but I think it is really many/most.

    One way to look at this is – there are over 10,000 downloads per day but only a couple of hundred complaints so 98% of the users are happy. But, I think most users happy or unhappy are silent so this ratio is not meaningful.

    More meaningful is that 121 out of 136 users report that 2.0.7 is broken. However, since a user is more likely to report something broken this number is negatively skewed so it is hard to estimate the proportion of unhappy users.

    The most meaningful statistics is the reviews – 2.0.7 is a major upgrade with many new features if it was successful for most users you should be receiving more positive reviews than negative ones but the reviews are overwhelmingly negative.

    Now I will try and explain why this makes me angry. 2.0.7 is causing harm to many/most users – in most cases just wasted time and effort and temporary downtime on websites, in some cases difficulty between a developer and his clients and in some rare cases actual material damage – loss of data. In view of this I really cannot understand why it is necessary to continue to distribute 2.0.7 as the default distribution. The problem reports you are receiving are duplicates of earlier days you are not learning anything new. Of course, we should be patient and wait for Photocrati to fix these problems but I don’t see why this requires the continued distribution of 2.0.7, especially without a warning since it is not the usual expected experience. 2.0.7 should be an optional download with proper caveats. I know the post that you reacted to has strong language in it but I did try in an earlier post to do it in a more gentle way but it was ignored so I decided that I needed to get your attention.

    Some other thoughts:
    I thought about the problem of estimating the number of users with major problems. The solution I came up with is to look at the daily download count of 1.9.13 on the first complete day after the start of distribution of 2.0.7. This number is probably pretty close to number of users who have downloaded 2.0.7 and then immediately roll-backed. On subsequent days the number will be contaminated with users who have read about problems with 2.0.7 and have opted to manually install 1.9.13. I don’t know how to get this number but if you can it would give the best statistic for this problem.

    The way I learned 2.0.7 was bad was on an installation with all other plugins deactivated running twentytwelve (actually a child theme of but I have only a trivial functions.php file in it) so essentially a clean installation except the database has data in it and I could not do something as basic as upload a single image. I actually debugged this since I like to debug and found that a required field ‘image_slug’ did not have a value in a SQL INSERT. This makes me surmise that either your in-house testing was insufficient or there is something wrong with your in-house testing protocol. I am a developer and I don’t think this kind of bug should have passed in-house testing. I think Photocrati has a problem with its in-house testing.

    In the process of debugging I also read some of the source code – actually spent several hours over two days reading it since I found it interesting. I am totally impressed with the level of expertise and also the care and thought that went into the design of 2.0. The Pope framework confused me at first but later I began to see the beauty of it all. This is really good stuff. But, it really doesn’t matter if you cannot make it work. If I were Photocrati I would admit that 2.0.7 is a failure and work on 2.1 I think this stuff has tremendous potential and hope to see it a big success.

    Lastly, I really do understand the life of a developer. I was a developer for many years. Not a PHP developer in the Internet world but a VBA developer in the business world. The environments are a little different but the human dynamics are essentially the same. I know the good feeling you get when you release good software – then you are a hero because you have made life better for so many people. Conversely, I know the bad feeling you get when you release bad software – now you are the devil because you have caused problems for so many people. Of course at work you are so busy trying to fix the problem that you don’t have time to think about it. But, riding the last train home at midnight alone it hits you – you have just let everybody down and in my case since this is the business world I personally knew many of my users. And you want to stop at some bar and get a drink but you can’t because you have to get home, take a shower, sleep for a few hours and then take the 5:00AM train back to the office. I have been there sadly multiple times. As you have said it is impossible to test for everything and if you don’t test everything there is bound to be problems. I really do understand all of this and really do have a lot of sympathy for developers.

    Thread Starter Magenta Cuda

    (@magenta-cuda)

    I do not believe that Alex Rabe and Photocrati are really bad people. I believe the problem is that they are so heavily involved in the situation that they cannot form a proper perspective. When I read what Alex has written I absolutely can tell that these are the thoughts and feelings of a developer – a developer’s perspective. If Alex and Photocrati would completely stop thinking like a developer and start thinking totally (and I really mean totally) like a non-technical user and consider the thoughts and feelings of that user I think they would have a different perspective. Proper balance is not automatic it takes work.

    Thread Starter Magenta Cuda

    (@magenta-cuda)

    Hi Alex Rabe,

    First thanks for a great plugin.

    Second some after thoughts: If Photocrati is going to continue to distribute 2.0.7 then I think they should:
    (1) Display a prominent warning that a user may have much more than the usual probability of major problems, referring them to the forum and allowing them to opt out of the installation.
    (2) A prominent warning about the consequences of deleting the plugin – i.e. loss of the image database.
    (3) A one-click auto rollback facility.

    Third I want to say some words in my defense:
    I honestly have nothing against the people at Photocrati. I do believe it is wrong to continue to distribute 2.0.7 but not because the people at Photocrati are deliberately irresponsible but because they are overwhelmed with the current situation and are not thinking straight. If you read my earlier posts you will see that I have admired the engineering that went into 2.0 – I especially liked the Pope implementation. I an not their enemy.

    I said “should have the responsibility” not “has the responsibility” since I am referring to “moral” responsibility not “legal” responsibility. Moral responsibility means you do the right thing even if you are not legally required to do so.

    As to the statistics you are quoting when as of August 12 101 people out of 115 – 87% – says something is broken I think it is time to conclude something is seriously wrong and consider withdrawing the product. (Of course I understand that people are more likely to vote negatively and this statistic is skewed negatively but even so these numbers are so one-sided that they are significant.) Consider this: the bulk of your users probably have not yet upgraded but everyday you are exposing an additional 10,000 to a deficient product. Would it not be wiser to withdraw the product, fix it and then release again.

    Lastly, I strongly sense a lack of empathy for the novice user. I am actually from the time when freeware was distributed in source code and you were expected to compile your own binary. Needless to say freeware was only used by a small elite. Freeware has steadily become more and more user friendly and consequently more and more widespread. I think the market now is the novice user and developers should keep him in mind. I think to disregard the novice user is going against flow of time. That’s my opinion and time will tell which of us is right.

    Thread Starter Magenta Cuda

    (@magenta-cuda)

    This is my reply to Jan Dembowski.

    I an not trying to disparage Photocrati. In an earlier post I tried to do this in a gentler way but Photocrati didn’t get it. If you read my earlier posts you will understand that I actually am on Photocrati’s side. I do not think these are bad people but they are currently overwhelmed by the situation and not using good judgement.

    Photocrati is actually a for profit company but this is really totally irrelevant. A developer whether for profit or not should have the responsibility to do the right thing for his users. Being a freeware developer should not give you the right to be irresponsible. Just because it is free should not make it right to distribute something harmful.

    I understand your point on user responsibility but the reality is just different. WordPress because of is ease of use attracts “irresponsible” users. The kind of users that never do a backup. The kind of user that is going to delete the plugin without realizing that he is also deleting the image database of thousands of photos that he may have spent years building. (If you read the posts this has happened many times.) You may say that these people got what they deserve for being irresponsible. I disagree. I think protecting this user from himself as much as practically possible is the right thing to do.

    An Aside: I think the world is moving towards removing responsibilities from users. The Google Chromebook is a very good example. I think developers should also be moving in this direction and assume your user is irresponsible because this is the reality.

    The problem with your other suggestions is that they are not one-click easy solutions. Even installing an earlier version is going to be challenging to some users. (WordPress should consider making it one-click easy to do a roll-back.) I feel very strongly that developers have a responsibility to novice users but I sense that you disagree. I think you are wrong because I think the novice user may be the majority user. (I don’t know this for a fact it is my estimate only.)

    It is very clear that Photocrati is not aiming for the low end here. Their goal is to build something massively capable. So, if you just want something simple NGG is probably the wrong choice. Still there will be some people that would like something more capable. There always will be a tradeoff between capabilities and bloat. As to whether NGG 2.0 has hit the sweet spot with regards to that tradeoff I think it is still too early to tell. Of course 2.0.7 is a failure but if and when they get 2.0 really working I think is the time to make that judgment.

    But, I really do appreciate your comment on bloat because it made me think. Photocrati has chosen to build its own framework, Pope (which is a PHP version of Python’s Zope). Now, if all or many plugin developers each decide to start using their own framework this is going to be a problem. (In Photocrati defense their framework is only 2403 lines – hmm seems too small to me I will look into this some more.) But, I think you have a good point – plugin developers should be discouraged from using their own frameworks if at all possible.

    I also think they should seriously consider withdrawing 2.0 from distribution as this is causing severe damage to their brand name. 2.0 is almost a completely new program – 1.9.13 has 23,207 lines of code and 2.0.7 has 70,086 lines of code – the old 1.9.13 code now lives in a sub folder named ngglegacy. I spent some time over the last two days browsing the source code. This stuff is really well built. The developers clearly have talent and are well versed in the latest programming technology. It is also clear that much thought and care went into design of this program. Exactly what you would expect from top class programmers who have pride in their work. But, the delivered product is really a failure. But, it doesn’t appear to me that their is anything fundamentally wrong. (I need to be careful here as I only had a cursory look and as any programmer will tell you the devil lives in the details.) I think it is a case of a product that was pushed out before it was ready. I think that this has the potential to eventually greatly surpass the original NextGEN. But Photocrati needs to protect its brand name so users will be willing to give it a try in the future. Otherwise this good work will be wasted – it has happened before.

    Thread Starter Magenta Cuda

    (@magenta-cuda)

    Since, I need a break from programming I thought I would try and debug this. First I should have mentioned that I am using TwentyTwelve with all plugins deactivated except for NextGen Gallery. After looking at the source code I modified C_CustomTable_DataMapper_Driver_Mixin::_create() in file class.customtable_datamapper_driver.php as follows:

    function _create($entity)
    	{
    		error_log( '##### C_CustomTable_DataMapper_Driver_Mixin::_create():entered' );
    		$retval = FALSE;
    		$id =  $this->object->_wpdb()->insert(
    			$this->object->get_table_name(),
    			$this->object->_convert_to_table_data($entity)
    		);
    		if ($id) {
    			$key = $this->object->get_primary_key_column();
    			$retval = $entity->$key = intval($this->object->_wpdb()->insert_id);
    		} else {
    			error_log( '##### C_CustomTable_DataMapper_Driver_Mixin::_create():$id=' . print_r( $id, TRUE ) );
    			error_log( '##### C_CustomTable_DataMapper_Driver_Mixin::_create():$entity=' . print_r( $entity, TRUE ) );
    		}
    		return $retval;
    	}

    This produced the following output in the PHP error log:

    [11-Aug-2013 01:15:41 UTC] ##### C_CustomTable_DataMapper_Driver_Mixin::_create():entered
    [11-Aug-2013 01:15:41 UTC] WordPress database error Field 'image_slug' doesn't have a default value for query INSERT INTO <code>wp_ngg_pictures</code> (<code>exclude</code>,<code>description</code>,<code>sortorder</code>,<code>imagedate</code>,<code>alttext</code>,<code>galleryid</code>,<code>filename</code>) VALUES ('','','0','2013-08-11 01:15:41','plymouth_duster-jpg','1','plymouth_duster.jpg') made by require('C:\WWW\wp\wp-blog-header.php'), require_once('C:\WWW\wp\wp-load.php'), require_once('C:\WWW\wp\wp-config.php'), require_once('C:\WWW\wp\wp-settings.php'), do_action('init'), call_user_func_array, C_NextGEN_Bootstrap->route, C_Router->serve_request, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, Mixin_Router->serve_request, C_Routing_App->serve_request, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, Mixin_Routing_App->serve_request, C_Routing_App->execute_route_handler, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, Mixin_Routing_App->execute_route_handler, C_Ajax_Controller->index_action, ExtensibleObject->call_method, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, A_NextGen_AddGallery_Ajax->upload_image_action, C_Gallery_Storage->upload_image, C_GalleryStorage_Base->__call, ExtensibleObject->__call, call_user_func_array, C_NggLegacy_GalleryStorage_Driver->upload_image, C_GalleryStorage_Base->__call, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, Mixin_NggLegacy_GalleryStorage_Driver->upload_image, C_NggLegacy_GalleryStorage_Driver->upload_base64_image, C_GalleryStorage_Base->__call, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, Mixin_GalleryStorage_Driver_Base->upload_base64_image, C_Image_Mapper->save, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, Mixin_DataMapper_Driver_Base->save, C_Image_Mapper->_save_entity, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, Mixin_Gallery_Image_Mapper->_save_entity, Mixin->call_parent, ExtensibleObject->call_method, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, C_CustomTable_DataMapper_Driver_Mixin->_save_entity, C_Image_Mapper->_create, ExtensibleObject->__call, ExtensibleObject->_exec_cached_method, ReflectionMethod->invokeArgs, C_CustomTable_DataMapper_Driver_Mixin->_create
    [11-Aug-2013 01:15:41 UTC] ##### C_CustomTable_DataMapper_Driver_Mixin::_create():$id=
    [11-Aug-2013 01:15:41 UTC] ##### C_CustomTable_DataMapper_Driver_Mixin::_create():$entity=stdClass Object
    (
        [exclude] =>
        [description] =>
        [sortorder] => 0
        [imagedate] => 2013-08-11 01:15:41
        [alttext] => plymouth_duster-jpg
        [galleryid] => 1
        [filename] => plymouth_duster.jpg
    )

    So it seems to be the source of the database error which causes the entity not to be created which eventually causes the exception.

    Plugin Author Magenta Cuda

    (@magenta-cuda)

    I finally got multi-site WP working (somehow managed to put a typo in .htaccess which caused me a lot of grief). The toolkit works for me. However, I found it necessary to use the ‘Magic Fields 2 Toolkit’ sub-menu of the Settings menu in the dashboard as the settings link on the plugin listing was not available. I am not sure if this is the problem you are referring to but if it is click on ‘Settings’ in the dashboard and look for the sub-menu ‘Magic Fields 2 Toolkit’.

    Plugin Author Magenta Cuda

    (@magenta-cuda)

    I am sorry about this problem. I only test in a single site environment and I should have stated so in my documentation. I will setup a multi-site environment and try and duplicate the problem. As I have never run a multi-site environment before I don’t have a good idea on how long it will take to resolve the problem. However, I will do my best to fix it ASAP.

    Plugin Author Magenta Cuda

    (@magenta-cuda)

    Please tell me the PHP version number. If it is older than 5.3.0 you will get this error. Although I don’t advertise this I have made an effort to be compatible with 5.3 but not anything older. My documentation says 5.4 because almost all of my testing is done on 5.4 but I think it will work on 5.3 but not anything older.

    Plugin Author Magenta Cuda

    (@magenta-cuda)

    I am sorry but I still don’t understand what you are trying to do. A specific example would be helpful. Exactly what are you trying to configure for.

    Plugin Author Magenta Cuda

    (@magenta-cuda)

    I don’t understand your question. Please tell me more specifically what you are trying to do.
    Regards,
    mc

    Plugin Author Magenta Cuda

    (@magenta-cuda)

    You must have posted as I was writing this reply. I will leave it as it explains exactly what is going wrong.

    Unfortunately, I only started using PHP from March 2012 so PHP 5.4 is the only version I know. PHP 5.4 introduced [ … ] as a shorthand for array( … ). You are probably running PHP 5.3 or earlier. I really misjudged this as I thought since 5.4 is over a year old most people would have upgraded by now. However, you are now the third person to report this problem so I guess 5.3 is still used by many people. In my next version 0.4 I have replaced [ … ] with array( … ) so it should be syntactically compatible with PHP 5.3. However, I only test with PHP 5.4 so basically the code is untested with PHP 5.3. But, it should probably work as syntactically compatible probably means semantically compatible in most cases.

    Plugin Author Magenta Cuda

    (@magenta-cuda)

    I have been thinking about your shortcode problem. It is very difficult to do the iteration you want with my existing code however a different facility may alleviate your problem. We can define a macro show_image:

    [show_custom_field field=carousel_image<1,$#index#> before="<div class='item'><img src='" post_id=$#id#]
    [show_custom_field field=carousel_title<1,$#index#> before="' alt='" post_id=$#id#]
    [show_custom_field field=carousel_title<1,$#index#> before="' title='" after="'><div class='carousel-caption'><h2>" post_id=$#id#]
    [show_custom_field field=carousel_title<1,$#index#> after="</h2>" post_id=$#id#]
    [show_custom_field field=carousel_description<1,$#index#> before=<p> after=</p></div></div> post_id=$#id#]

    Then invoke the macro with a shortcode

    [show_macro macro="show_image" index=1 id=468]
    [show_macro macro="show_image" index=2 id=468]
    [show_macro macro="show_image" index=3 id=468]

    I have coded a macro facility to do this and will put it in version 0.4.

    mc

Viewing 15 replies - 106 through 120 (of 150 total)