{"id":804,"date":"2008-12-02T11:36:50","date_gmt":"2008-12-02T00:36:50","guid":{"rendered":"http:\/\/www.somethinkodd.com\/oddthinking\/?p=804"},"modified":"2008-12-03T00:52:35","modified_gmt":"2008-12-02T13:52:35","slug":"online-photo-db-stage-4p-evaluation-of-phpwebgallery","status":"publish","type":"post","link":"https:\/\/www.somethinkodd.com\/oddthinking\/2008\/12\/02\/online-photo-db-stage-4p-evaluation-of-phpwebgallery\/","title":{"rendered":"Online Photo DB: Stage 4p &#8211; Evaluation of PhpWebGallery"},"content":{"rendered":"<div class=\"aside\">This post is part of the <a href=\"http:\/\/www.somethinkodd.com\/oddthinking\/tag\/online-photo-database\/\">Online Photo Database project documentation<\/a>. Learn more about the project&#8217;s <a href=\"http:\/\/www.somethinkodd.com\/oddthinking\/2008\/12\/03\/online-photo-database-project-status\/\">current status<\/a>.<\/div>\n<p>Which <a href=\"http:\/\/www.somethinkodd.com\/oddthinking\/2008\/06\/12\/online-photo-site-stage-2-clean-requirements\/\">requirements<\/a> does <a href=\"http:\/\/www.phpwebgallery.net\/\">PHPWebGallery<\/a> meet?<\/p>\n<table class=\"simple\">\n<tr>\n<th>Id<\/th>\n<th>Pri<\/th>\n<th>Requirement<\/th>\n<th>Pass?<\/th>\n<td>Notes<\/td>\n<\/tr>\n<tr>\n<th>GEN1<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>Accessible by a typical web-browser<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>GEN2<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Active development of new features<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>OWN1<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>Ownership of photos is retained by me.<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>OWN2<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>Future-proofed against money running out: mine or yours<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>OWN3<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Ownership of meta-data is retained by me.<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT1<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>Photographs grouped into albums by event<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT2<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>Photographs tagged with people<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT3<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Photographs tagged with locations, objects, activities<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT4<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Performers tagged with real and stage names.<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT5<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Attribution of photographer details<\/td>\n<td>Y<\/td>\n<td style='text-align:left''>&#8220;Author&#8221; field<\/td>\n<\/tr>\n<tr>\n<th>CAT6<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Attribution of copyright owner&#8217;s details<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT7<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Rating of photographs<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT8<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Sorting\/Filtering by rating<\/td>\n<td>Y<\/td>\n<td style='text-align:left''>But globally across site, not by album<\/td>\n<\/tr>\n<tr>\n<th>CAT9<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Albums grouped by type<\/td>\n<td>Y<\/td>\n<td style='text-align:left''>Only way to access is via tree? Discourages use.<\/td>\n<\/tr>\n<tr>\n<th>CAT10<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Albums grouped by date<\/td>\n<td>Y<\/td>\n<td style='text-align:left''>Manually, clumsy interface<\/td>\n<\/tr>\n<tr>\n<th>CAT11<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Areas or points of photograph tagged<\/td>\n<td>N<\/td>\n<td style='text-align:left''>Tags need to be declared.<\/td>\n<\/tr>\n<tr>\n<th>CAT12<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Simple contact management of subjects<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT13<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Hidden fields on contacts to distinguish like-named people<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT14<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Tagging of anonymous people to enable searching<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT15<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Corrections to names update everywhere<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT16<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Attribution of copyright details<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>CAT17<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Control over (default) ordering<\/td>\n<td>N<\/td>\n<td style='text-align:left''>Various sorts available, but not arbitrary one?<\/td>\n<\/tr>\n<tr>\n<th>S+L1<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>Link to other photos with same tag within an album<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>S+L2<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Associate URLs with subjects, that are displayed.<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>S+L3<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Link to other photos with same tag across my albums<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>S+L4<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Search of tags by keyword<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>S+L5<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Cross-promotion of other albums and sites.<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>S+L6<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Link to other photos with same tag across other photo sites<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>S+L7<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Search of album names by keyword<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>S+L8<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>User-generatable URLs to search tags by keyword<\/td>\n<td>N<\/td>\n<td style='text-align:left''>Although custom permalinks for albums available.<\/td>\n<\/tr>\n<tr>\n<th>COMM1<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Multi-user Tagging<\/td>\n<td>N<\/td>\n<td style='text-align:left''>Having multiple admins doesn&#8217;t count.<\/td>\n<\/tr>\n<tr>\n<th>COMM2<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Notifications of appearance in photos<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>COMM3<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Comments permitted<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>COMM4<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Notification of comments<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>COMM5<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>RSS or Atom Feeds for comments<\/td>\n<td>Y<\/td>\n<td style='text-align:left''>Comments + Images in one feed<\/td>\n<\/tr>\n<tr>\n<th>COMM6<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>RSS or Atom Feeds for subjects<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>COMM7<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>RSS or Atom Feeds for new photos<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PQ1<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>Web-quality images shall be displayed by default.<\/td>\n<td>N<\/td>\n<td style='text-align:left''>Displays full quality of whatever is uploaded!<\/td>\n<\/tr>\n<tr>\n<th>PQ2<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Print-quality images shall be available.<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PQ3<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Automatically generated thumbnail and web-quality versions.<\/td>\n<td>N<\/td>\n<td style='text-align:left''>Thumbnails only<\/td>\n<\/tr>\n<tr>\n<th>PQ4<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Archive-quality images shall be stored.<\/td>\n<td>?<\/td>\n<td style='text-align:left''>Untested. Not plausible if web-quality not generated.<\/td>\n<\/tr>\n<tr>\n<th>PQ5<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Custom thumbnails (e.g. choosing to crop over shrinking.)<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PQ6<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Support for short video<\/td>\n<td>Y?<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PQ7<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Support for long video<\/td>\n<td>Y?<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PERF1<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Quota > 0.5 TB, if any<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PERF2<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Low-cost<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PERF3<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Fast response time<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PERF4<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Scale to thousands of tags<\/td>\n<td>N<\/td>\n<td style='text-align:left''>Tags need to be declared. Checkbox of all tags<\/td>\n<\/tr>\n<tr>\n<th>PERF5<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>< 1 minute face-time per photograph<\/td>\n<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PERF6<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Free<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>UI1<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>Forward\/Backward navigation between photos in album.<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>UI2<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Slideshows<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>UI3<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Display of many thumbnails at once<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PRIV1<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>Their email address should never be published on the web.<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PRIV2<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Registration and logging in not required for general use.<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>PRIV3<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Robust privacy features for photographs<\/td>\n<td>Y<\/td>\n<td style='text-align:left''>Albums can be declared private, and shown only to customised groups or people.<\/td>\n<\/tr>\n<tr>\n<th>WF1<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Hint to original location on my harddrive<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>WF2<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Auto-complete or partial search on tags during input<\/td>\n<td>Y?<\/td>\n<td style='text-align:left''>Checkbox<\/td>\n<\/tr>\n<tr>\n<th>WF3<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Read EXIF data from image<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>WF4<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>Support unpublished draft state <\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>MIGR1<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>API to add photos<\/td>\n<td>Y<\/td>\n<td style='text-align:left''>Schema available<\/td>\n<\/tr>\n<tr>\n<th>MIGR2<\/th>\n<td>C<\/td>\n<td style='text-align: left;'>API to add tags<\/td>\n<td>Y<\/td>\n<td style='text-align:left''>Schema available<\/td>\n<\/tr>\n<tr>\n<th>MIGR3<\/th>\n<td>I<\/td>\n<td style='text-align: left;'>Tags can be non-specific to areas of photo<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>METR1<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>&#8220;How many visitors?&#8221; metric<\/td>\n<td>Y<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<tr>\n<th>METR2<\/th>\n<td>D<\/td>\n<td style='text-align: left;'>\u00e2\u20ac\u0153How long does a visitor stay?\u00e2\u20ac\u009d metric<\/td>\n<td>N<\/td>\n<td style='text-align:left''><\/td>\n<\/tr>\n<\/table>\n<h3>Summary<\/h3>\n<p>PHPWebGallery was a surprise entrant that I stumbled across while <a href=\"http:\/\/www.somethinkodd.com\/oddthinking\/2008\/12\/02\/online-photo-db-wordpress-mini-evaluation\/\">evaluating WordPress plugins<\/a>.<\/p>\n<p>It is another open-source, PHP-based, self-hosted photo album.<\/p>\n<p>It was actually pretty bloody good, with these tiny failings that render it completely unsuitable.<\/p>\n<p>The first is that it only supports two sizes &#8211; thumbnail and original. I need at least three, preferably four sizes: thumbnail, web, print and (optionally) archive versions. Missing the web-sized version is a critical problem.<\/p>\n<p>The other is that it treats tags like categories; it assumes that you are only going to have a couple of dozen at most. It displays them all on the screen with checkboxes to select which ones you want. I used to do something similar (but smarter; a multi-select box, so it didn&#8217;t take as much screen real-estate) but I had to stop because it was taken too long to download over 1200 names on every page. This software simply doesn&#8217;t scale for large numbers of tags.<\/p>\n<p>It&#8217;s other problems could conceivably be fixed with a plug-in or two (E.g. spaces are allowed in tags, but not in the photo filenames!) but these two issues seem pretty fundamental.<\/p>\n<p>It&#8217;s a shame. I liked this one. It has real privacy control, the ability to specify the photographer, batch uploads and it bases its world view on a directory structure that you can understand.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Which <a href=\"http:\/\/www.somethinkodd.com\/oddthinking\/2008\/06\/12\/online-photo-site-stage-2-clean-requirements\/\">requirements<\/a> does <a href=\"http:\/\/www.phpwebgallery.net\/\">PHP Web Gallery<\/a> meet?<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_s2mail":"","footnotes":""},"categories":[285,47],"tags":[284,48,376],"class_list":["post-804","post","type-post","status-publish","format-standard","hentry","category-photography-geek","category-review","tag-online-photo-database","tag-photography","tag-review"],"_links":{"self":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts\/804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/comments?post=804"}],"version-history":[{"count":5,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts\/804\/revisions"}],"predecessor-version":[{"id":842,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts\/804\/revisions\/842"}],"wp:attachment":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/media?parent=804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/categories?post=804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/tags?post=804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}