{"id":872,"date":"2008-07-19T00:12:36","date_gmt":"2008-07-18T15:12:36","guid":{"rendered":"https:\/\/regex.info\/blog\/2008-07-19\/872"},"modified":"2008-07-19T00:12:36","modified_gmt":"2008-07-18T15:12:36","slug":"pretty-pictures-announcing-my-photostreams","status":"publish","type":"post","link":"https:\/\/regex.info\/blog\/2008-07-19\/872","title":{"rendered":"Pretty Pictures: Announcing My Photostreams"},"content":{"rendered":"\n\n<div class='ic' style='margin: 0'>\n<a href=\"\/blog\/photostream\/main.html#random\"><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/PhotoStreamScreenshot.png\" width=\"715\" height=\"567\"\nclass=\"raw\"\nid=\"iPhotoStreamScreenshot\"\/><\/a>\n<\/div>\n\n<p style='margin-top:0'>I've been tinkering for the last year or so with a\n&#8220;photostream&#8221; addition to my blog, in which <span class='nobr'>I can<\/span> highlight the occasional\nnot-<i>too<\/i>-bad photo <span class='nobr'>I post<\/span> on my blog. <span class='nobr'>I'm not sure<\/span> it's really ready,\nbut I'm releasing it now and we'll see how it goes.<\/p>\n\n<p>I've partitioned up the best images from my blog into <a\nhref=\"\/blog\/photostream\/\">several photostreams<\/a>,\nincluding one for <a\nhref=\"\/blog\/photostream\/japan.html\">Japan<\/a>, and one for\neach season:\n\n<a href=\"\/blog\/photostream\/spring.html\">Spring<\/a>\n&middot; <a\nhref=\"\/blog\/photostream\/summer.html\">Summer<\/a> &middot;\n<a href=\"\/blog\/photostream\/fall.html\">Autumn<\/a> &middot;\n<a href=\"\/blog\/photostream\/winter.html\">Winter<\/a>.\nThere's also <span class='nobr'>a catch<\/span>-all <a\nhref=\"\/blog\/photostream\/misc.html\">Miscellaneous<\/a>\nstream for odd, kooky, or otherwise interesting (but not necessarily\n&#8220;pretty&#8221;) photos, and <span class='nobr'>a stream<\/span> full of pictures of <a\nhref=\"\/blog\/photostream\/anthony.html\">my kid<\/a> that <span class='nobr'>I\nsuspect<\/span> only <span class='nobr'>I and<\/span> my mom will use. Finally, there's an overall &#8220;<a\nhref=\"\/blog\/photostream\/main.html\">Main<\/a>&#8221; stream that\nincludes all the non-kid photos.<\/p>\n\n<p>I try to include only good photos in each stream, but <span class='nobr'>I give<\/span> you <span class='nobr'>a way<\/span>\nto let me know that one isn't really good enough for inclusion. (More on that in <span class='nobr'>a bit.<\/span>)<\/p>\n\n<p>Visiting a stream's page, you see <span class='nobr'>a gird<\/span> three pictures wide. <span class='nobr'>It may take<\/span> <span class='nobr'>a while<\/span> to load, but <span class='nobr'>I make<\/span> sure to load images from the top down, the\nscreen should fill up fairly quickly. <span class='nobr'>You can scroll<\/span> down, or hit the\n[reshuffle] button to see different pictures.<\/p>\n\n<p>Clicking on a photo leads to a page like this...<\/p>\n\n<div class='ic tight'>\n<a href=\"\/blog\/photostream\/main.html#JEF_041391\"><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/PhotoStreamScreenshot2.png\" width=\"690\" height=\"498\"\nclass=\"raw\"\nid=\"iPhotoStreamScreenshot2\"\/><\/a>\n<\/div>\n\n<p>Floating at the top is a control panel...<\/p>\n\n<div class='ic' style='margin-bottom:0'>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/PhotoStreamScreenshot3.png\" width=\"745\" height=\"314\"\nclass=\"raw\"\nid=\"iPhotoStreamScreenshot3\"\/>\n<\/div>\n\n<p>The control panel is normally intended to be hidden. Mouse down to the\nlower half of the screen, and it'll disappear.<\/p>\n\n<style type='text\/css'>\n  .k872 { color: white; border: solid #444 1px; padding: 1px }\n<\/style>\n\n<p style='margin-left:2em'>To visit the next picture in the stream, use the <b class='k872'>N<\/b> key.<\/p>\n\n<p style='margin-left:2em'>To go back to the previous picture, use the <b class='k872'>P<\/b> key.<\/p>\n\n<p style='margin-left:2em'>To visit the blog post associated with the picture, hit <b class='k872'>ENTER<\/b>.<\/p>\n\n<p style='margin-left:2em'>To return to the grid of photos, use the <b class='k872'>ESC<\/b> key.<\/p>\n\n<p>Bringing the mouse to the upper half of the screen recalls the control\npanel, which you can use to start <span class='nobr'>a slideshow,<\/span> vote on <span class='nobr'>a photo<\/span> that you\nthink is better\/worse than average for the stream, etc.<\/p>\n\n<p>Returning to the grid (via the <b class='k872'>ESC<\/b> key, or the grid\nicon in the control panel), and in the upper-right you'll find links to the\nother photostreams, and to the <a\nhref=\"http:\/\/en.wikipedia.org\/wiki\/Media_RSS\" class='quiet'>Media RSS<\/a>\nfeed for the stream.<\/p>\n\n<p>I spent considerable effort in building it to make it efficient (it\npre-downloads the next few images while you're looking at one, for\nexample), but there's <span class='nobr'>a lot<\/span> of image data involved, so the first time you\ntry it, it'll likely be fairly sluggish for the first few pictures.<\/p>\n\n<p style='font-size:140%'>&mdash; <a class='quiet' href=\"\/blog\/photostream\/\">Start here<\/a> &mdash; <\/p>\n\n<hr style='margin:30px 0' width='15%' align='left'\/>\n\n<p>As I said, I've been tinkering with this on and off for the better part\nof <span class='nobr'>a year.<\/span> <span class='nobr'>I got the<\/span> idea when <span class='nobr'>I saw<\/span> the <a\nhref=\"https:\/\/addons.mozilla.org\/en-US\/firefox\/addon\/5276\">FoxSaver add-on\nfor Firefox<\/a> (the name coming from Firefox + Screen Saver) that could\nturn any Media-RSS feed into <span class='nobr'>a pretty<\/span> screensaver-like slideshow. <span class='nobr'>You can view<\/span> my streams with it, but better yet, you can view its streams of\n<i>really<\/i> amazing photos.<\/p>\n\n<p>Anyway, every few months, <span class='nobr'>I'd return<\/span> to tinker more. <span class='nobr'>It's a lot<\/span> of heavy\nJavaScript that would have been impossible for me without the\nmost-excellent <a href=\"http:\/\/developer.yahoo.com\/yui\/\">Yahoo! User\nInterface Library<\/a>, so thank you Yahoo!.<\/p>\n\n<p>I finally got serious with it in May when <span class='nobr'>I built<\/span> the &#8220;control panel&#8221;\nthing. <span class='nobr'>It would<\/span> be an understatement to say that graphical design is not my\nstrong point, but <span class='nobr'>I was<\/span> really happy with how it came out.<\/p>\n\n<p>I had a friend whose opinion I respect take <span class='nobr'>a look<\/span> at my photostream\nstuff at that point, and his response was essentially &#8220;it's great, except\nfor the really ugly control panel.&#8221;. Doh!<\/p>\n\n<p>Since then, I've spent the last couple of months deep in though on how\nto fix things, but I've come up with nothing, so yesterday <span class='nobr'>I slapped<\/span> the\n&#8220;... to dismiss this overlay&#8221; note onto the panel in the hope that greater\neducation is the key, and we'll see how it goes.<\/p>\n\n<p>Give <a href=\"\/blog\/photostream\/\">it<\/a> <span class='nobr'>a try,<\/span> and let me know what you think...<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>I've partitioned up the best images from my blog into several photostreams, including one for Japan, and one for each season: Spring - Summer - Autumn - Winter. There's also a catch-all Miscellaneous stream for odd, kooky, or otherwise interesting (but not necessarily \"pretty\") photos, and a stream full of pictures of my kid that I suspect only I and my mom will use. Finally, there's an overall \"Main\" stream that includes all the non-kid photos.<\/p> <p>I try to include only good photos in each stream, but I give you a way to let me know that one isn't really [...]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/posts\/872"}],"collection":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/comments?post=872"}],"version-history":[{"count":0,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/posts\/872\/revisions"}],"wp:attachment":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/media?parent=872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/categories?post=872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/tags?post=872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}