{"id":188,"date":"2007-09-18T10:47:11","date_gmt":"2007-09-18T17:47:11","guid":{"rendered":"http:\/\/www.stevenbrown.ca\/blog\/archives\/188"},"modified":"2007-11-13T15:35:59","modified_gmt":"2007-11-13T22:35:59","slug":"photofile","status":"publish","type":"post","link":"https:\/\/www.stevenbrown.ca\/blog\/archives\/188","title":{"rendered":"PhotoFile"},"content":{"rendered":"<p>Screenshot update!  Still no version&#8230; as it&#8217;s still just a husk of a UI&#8230; mostly.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/i0.wp.com\/www.stevenbrown.ca\/blog\/wordpress\/..\/files\/2007\/09\/screenshot-photofile-1.png?ssl=1\" title=\"PhotoFile pre versioning\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.stevenbrown.ca\/blog\/wordpress\/..\/files\/2007\/09\/screenshot-photofile-1.thumbnail.png?resize=400%2C262&#038;ssl=1\" width=\"400\" height=\"262\" alt=\"PhotoFile pre versioning\" class=\"imageframe imgaligncenter\" \/><\/a><\/p>\n<p>I&#8217;ve changed the GUI quite a bit.  Actually, what it is now took a surprisingly long time to arrive at.  I spent time going through some ideas on paper, and I even did a huge amount of refactoring to make coding easier.  It&#8217;s at the point where a GUI in another API could easily be thrown in&#8230;. it just requires me separating the PhotoFile class into PhotoFile and PhotoFileGTK&#8230; but I&#8217;m not going to bother, at this point, because I don&#8217;t think there&#8217;s much point in offering it in another kit.  GUI and no-GUI could be useful, though.  Anyway, there&#8217;s still quite a few problems remaining, including:<\/p>\n<ol>\n<li><strong>Supported File Types:<\/strong> I need a list of file types (extensions) that are common in Cameras and that people would be interested in transferring.  So far, I&#8217;ve got what my camera supports: JPG, THM, AVI, and WAV.  Some cameras allow for sound recordings to be created (WAVs on mine) but I&#8217;m not sure what I should do with these&#8230;  rename to have the same name as the image, I guess (if it&#8217;s a memo).  Post your camera&#8217;s formats and how they&#8217;re used in the comments!  Example of my Camera: <em>WAV files with a filename the same as an image are a sound memo for that image.  AVIs are movies and have and accompanying THM file (same filename) which is a small Jpeg containing a thumbnail of the movie.<\/em><\/li>\n<li><strong>Empty Source Directories:<\/strong> When moving files from the source, should I automatically remove any empty source directories? Maybe add an advanced property for this?  I certainly don&#8217;t want to add it to the main dialog.  KISS.<\/li>\n<li><strong>Separate Operations:<\/strong>  I&#8217;m not sure if each file should save it&#8217;s own set of operations for the session.  For example, user selects manual rotation for two files, and auto-rotation for the rest.  Should <em>Process All Files<\/em> remember those two files&#8217; manual rotation, or should it apply the visible operations to ALL files.  If I should save settings for each file, then I feel like I&#8217;d need another button, \t<em>Process All Files Using These Operations<\/em>, just to be clear&#8230; maybe a &#8220;Reset to defaults&#8221; somewhere&#8230;  sounds like too much clutter, but it could be useful for people whose camera&#8217;s don&#8217;t store EXIF.  Suggestions?<\/li>\n<li><strong>Manual Rotation:<\/strong> Need a dropdown or something for Manual rotation!  Probably: {Left, Right, 180} or&#8230; a button <em>Rotate 90 CW<\/em> that when clicking, rotates the preview 90 degrees, clockwise.  I kind of like that idea&#8230; super simple.  To rotate &#8220;left&#8221;, the user would quickly learn that 3 quick clicks is quite fast.<\/li>\n<li><strong>White Space:<\/strong> I think I need a little more white-space between the different sections.<\/li>\n<li><strong>Functionality!<\/strong><\/li>\n<li><strong>Camera&#8217;s dying?<\/strong> Oh noes!  I love my Canon IXY 400, but I&#8217;ve recently been getting a very ominous <em>Memory Card Error<\/em> message, more frequently. It worries me.<\/li>\n<\/ol>\n<p>Aside from these things, I think I&#8217;m pretty satisfied with the current UI.<\/p>\n<p>Still a tiny app, and still lots of things to do!  \ud83d\ude00<\/p>\n<p><code><br \/>\n$ cat photofile.py | wc -l<br \/>\n792<br \/>\n$ cat photofile.py | grep FIXME | wc -l<br \/>\n25<br \/>\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Screenshot update! Still no version&#8230; as it&#8217;s still just a husk of a UI&#8230; mostly. I&#8217;ve changed the GUI quite a bit. Actually, what it is now took a surprisingly long time to arrive at. I spent time going through some ideas on paper, and I even did a huge amount of refactoring to make&hellip; <a class=\"more-link\" href=\"https:\/\/www.stevenbrown.ca\/blog\/archives\/188\">Continue reading <span class=\"screen-reader-text\">PhotoFile<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3,11],"tags":[33,10,47,9,46,29],"class_list":["post-188","post","type-post","status-publish","format-standard","hentry","category-geek","category-projects","tag-development","tag-gnome","tag-photofile","tag-photos","tag-python","tag-screenshots","entry"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4jEMb-32","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.stevenbrown.ca\/blog\/wp-json\/wp\/v2\/posts\/188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.stevenbrown.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.stevenbrown.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.stevenbrown.ca\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.stevenbrown.ca\/blog\/wp-json\/wp\/v2\/comments?post=188"}],"version-history":[{"count":0,"href":"https:\/\/www.stevenbrown.ca\/blog\/wp-json\/wp\/v2\/posts\/188\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.stevenbrown.ca\/blog\/wp-json\/wp\/v2\/media?parent=188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.stevenbrown.ca\/blog\/wp-json\/wp\/v2\/categories?post=188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.stevenbrown.ca\/blog\/wp-json\/wp\/v2\/tags?post=188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}