<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Photoshop, etc.</title>
	<atom:link href="https://www.davidebarranca.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.davidebarranca.com</link>
	<description>Random thoughts on Photoshop, Coding and all the rest</description>
	<lastBuildDate>
	Thu, 21 Feb 2019 10:04:09 +0000	</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.1</generator>
	<item>
		<title>Adobe Extension Manager Error Codes</title>
		<link>https://www.davidebarranca.com/2019/02/adobe-extension-manager-error-codes/</link>
				<comments>https://www.davidebarranca.com/2019/02/adobe-extension-manager-error-codes/#respond</comments>
				<pubDate>Thu, 21 Feb 2019 10:04:05 +0000</pubDate>
		<dc:creator><![CDATA[Davide Barranca]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Adobe Extension Manager]]></category>
		<category><![CDATA[ExManCmd]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3465</guid>
				<description><![CDATA[Here is a list of Adobe Extension Manager (ExManCmd) error codes.]]></description>
								<content:encoded><![CDATA[<div class="pf-content">
<p>Here is a list of Adobe Extension Manager <code>ExManCmd</code>error codes.</p>



<p>I don’t use <code>zxp</code>files to install my products, but some people do (e.g. with <a href="https://install.anastasiy.com/">Anastasiy’s Extension Manager</a>, that under the hood calls <code>ExManCmd</code>) and error numbers are always hard to decode. The list has been kindly provided by Adobe’s Erin Finnegan.</p>



<h3>ExManCmd Errors</h3>



<p></p>



<p>EXMAN_FAILED_INSUFFICIENT_PRIVILEDGE = -151,<br>EXMAN_FAILED_OPEN_FILES = -152,<br>EXMAN_FAILED_READ_FILES = -154,<br>EXMAN_FAILED_WRITE_FILES = -155,<br>EXMAN_FAILED_COPY_FILES = -156,<br>EXMAN_FAILED_DELETE_FILES = -157,<br>EXMAN_FAILED_CREATE_FILES = -158,<br>EXMAN_FAILED_FILE_TYPE_NOT_MATCH = -159,<br>EXMAN_FAILED_FILE_NOT_FOUND = -160,<br>EXMAN_FAILED_ITERATE_DIRECTORY = -161,<br>EXMAN_FAILED_FILE_EXISTS_ALREADY = -162,<br>EXMAN_FAILED_CHANGE_PERMISSION = -163,<br>EXMAN_FAILED_CREATE_DIRECTORY = -164,<br>EXMAN_FAILED_DIRECTORY_EXISTS_ALREADY = -165,<br>EXMAN_FAILED_IS_NOT_DIRECTORY = -166,<br>EXMAN_FAILED_IS_NOT_FILE = -167,<br>EXMAN_FAILED_PATH_INVALID = -168,<br>EXMAN_FAILED_PATH_NOT_FOUND = -169,<br>EXMAN_FAILED_ACCESS_DENIED = -170,<br>EXMAN_FAILED_FILE_LOCKED = -171,<br>EXMAN_FAILED_SHARING_VIOLATION = -172,<br>EXMAN_FAILED_JUDGE_FILE_EXIST = -173,<br>EXMAN_FAILED_FILESCHEMA_ILLEGAL = -174,<br>EXMAN_FAILED_ELEVATE_START = -175,<br>EXMAN_FAILED_ELEVATE_FILEDEL = -176,<br>EXMAN_FAILED_ELEVATE_FILECOPY = -178,<br>EXMAN_FAILED_ELEVATE_MAKEDIR = -179,<br>EXMAN_FAILED_UNHANDLED_EXCEPTION = -180,<br>EXMAN_FAILED_NO_INSTALLED_FILES = -181,<br>EXMAN_FAILED_ELEVATE_EXIST = -182,<br>EXMAN_FAILED_IS_NOT_LINK = -183,<br>EXMAN_FAILED_ELEVATE_ADDPERMISSION = -184,<br>EXMAN_FAILED_EXTRACT_ZXP = -201,<br>EXMAN_FAILED_DECRYPT = -202,<br>EXMAN_FAILED_ENCRYPT = -203,<br>EXMAN_FAILED_PARSE_XMANCONFIG = -251,<br>EXMAN_FAILED_PARSE_MXI = -252,<br>EXMAN_FAILED_DESTINATION_MISSING_TOKEN = -253,<br>EXMAN_FAILED_PARENT_FOLDER_IN_PATH = -254,<br>EXMAN_FAILED_SOURCE_FORMAT_ERROR = -255,<br>EXMAN_FAILED_UNKNOWN_TOKEN = -256,<br>EXMAN_FAILED_MANIFEST_NODE_NOT_FOUND = -257,<br>EXMAN_FAILED_XML_NOT_FOUND = -259,<br>EXMAN_FAILED_ELEMENT_NOT_FOUND = -260,<br>EXMAN_FAILED_INVALID_VALUE_IN_MXI = -261,<br>EXMAN_FAILED_OPEN_XMANCONFIG_URI = -262,<br>EXMAN_FAILED_DOWNLOAD_XMANCONFIG = -263,<br>EXMAN_FAILED_PARSE_TODOFILE = -264,<br>EXMAN_FAILED_PARSE_XML = -265,<br>EXMAN_FAILED_GENERATE_XMANCONFIG = -266,<br>EXMAN_FAILED_INVALID_MANIFEST = -267,<br>EXMAN_FAILED_INVALID_MANIFEST_VERSION = -268,<br>EXMAN_FAILED_INVALID_MANIFEST_BUNDLE_ID = -269,<br>EXMAN_FAILED_INVALID_MANIFEST_BUNDLE_VERSION = -270,<br>EXMAN_FAILED_MANIFEST_EXCEPTION = -271,<br>EXMAN_FAILED_RESOURCE_EXCEPTION = -272,<br>EXMAN_FAILED_BLOCK_LIST_EXCEPTION = -273,<br>EXMAN_FAILED_INVALID_BLOCK_LIST = -274,<br>EXMAN_FAILED_CLOSE_HEADLIGHTS_SESSION = -302,<br>EXMAN_FAILED_INIT_HEADLIGHTS = -303,<br>EXMAN_FAILED_NULL_POINTER = -351,<br>EXMAN_FAILED_BUFFER_NOT_ENOUGH = -352,<br>EXMAN_FAILED_REJECT_LICENSE_AGREEMENT = -401,<br>EXMAN_FAILED_SIGNATURE_VALIDATION = -402,<br>EXMAN_FAILED_NO_PRODUCT_SUPPORT_THIS_CEP = -403,<br>EXMAN_FAILED_CEP_NOT_SIGNED = -404,<br>EXMAN_FAILED_REJECT_SIGNATURE_VALIDATION = -405,<br>EXMAN_FAILED_EXTENSION_NOT_FOUND = -406,<br>EXMAN_FAILED_REQUIRED_EXTENSION_NOT_INSTALLED = -407,<br>EXMAN_FAILED_REQUIRED_EXTENSION_NOT_ENABLED = -408,<br>EXMAN_FAILED_EXTENSION_BLOCKED = -409,<br>EXMAN_FAILED_INVALID_ZXP_FILE = -410,<br>EXMAN_FAILED_NO_SUPPORTED_PRODUCT = -411,<br>EXMAN_FAILED_CONFLICT_EXTENSION_FOUND = -412,<br>EXMAN_FAILED_INVALID_EMBEDDED_EXTENSION = -413,<br>EXMAN_FAILED_EMBEDDED_EXTENSION_NOT_SIGNED = -414,<br>EXMAN_FAILED_RESOURCE_FOLDER_NOT_FOUND = -415,<br>EXMAN_FAILED_CREATE_EXTENSION = -416,<br>EXMAN_FAILED_WRONGDEPENDENCY = -417,<br>EXMAN_FAILED_NEWER_EXTENSION_INSTALLED = -418,<br>EXMAN_FAILED_DEPENDENCY_CHANGED_WHEN_UPDATE = -419,<br>EXMAN_FAILED_MXP_NO_SUPPORTED = -420,<br>EXMAN_FAILED_DOWNLOAD_EXTENSION = -421,<br>EXMAN_FAILED_REJECT_OVERWRITE_CONFLICT_EXTENSION = -422,<br>EXMAN_FAILED_USER_CANCEL_DOWNLOAD = -423,<br>EXMAN_FAILED_CAN_NOT_INSTALL_FOR_ALL = -424,<br>EXMAN_FAILED_PRODUCT_NOT_FOUND = -451,<br>EXMAN_FAILED_TOKEN_NOT_FOUND = -453,<br>EXMAN_FAILED_PRODUCT_NOT_SUPPORTED = -454,<br>EXMAN_FAILED_PARSER_PRODUCT_TOKEN = -455,<br>EXMAN_FAILED_POINT_PRODUCT_NEED_QUIT = -456,<br>EXMAN_FAILED_SPECIFIER_NOT_FOUND = -457,<br>EXMAN_FAILED_REQUIRED_PRODUCT_NOT_INSTALLED = -458,<br>EXMAN_FAILED_REQUIRED_VERSION_NOT_INSTALLED = -459,<br>EXMAN_FAILED_DBWRAPPER_COMMON = -500,<br>EXMAN_FAILED_DBWRAPPER_CONNECTFAILED = -501,<br>EXMAN_FAILED_DBWRAPPER_DISCONNECTFAILED = -502,<br>EXMAN_FAILED_DBWRAPPER_QUERYFAILED = -503,<br>EXMAN_FAILED_DBWRAPPER_NOTSTARTUP = -504,<br>EXMAN_FAILED_DBWRAPPER_NOTSHUTDOWN = -505,<br>EXMAN_FAILED_DBWRAPPER_DATANOTFOUND = -506,<br>EXMAN_FAILED_DBWRAPPER_CREATTABLFAILED = -507,<br>EXMAN_FAILED_DBWRAPPER_NAME_EXIST = -508,<br>EXMAN_FAILED_UPDATE_DATABASE = -509,<br>EXMAN_FAILED_INIT_BT_FAILED = -552,<br>EXMAN_FAILED_VALIDATE_LICENSE = -601,<br>EXMAN_FAILED_GET_USER_ACOUNTDAT = -602,<br>EXMAN_FAILED_INVALID_USERACOUNT = -603,<br>EXMAN_FAILED_GET_LICENSE_CHECK_RESPONSE = -604,<br>EXMAN_FAILED_COMMON_EXCEPTION = -651,<br>EXMAN_FAILED_SSL_CONTEXT_EXCEPTION = -652,<br>EXMAN_FAILED_SSL_EXCEPTION = -653,<br>EXMAN_FAILED_COMMON_SET_MGMT = -851,<br>EXMAN_FAILED_STRING_CONVERT = -901,<br>EXMAN_FAILED_USER_NOT_FOUND = -902,<br>EXMAN_FAILED_FETCH_USER_INFO = -903,<br>EXMAN_FAILED_GET_USER_HOME_FOLDER = -904</p>
</div>]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2019/02/adobe-extension-manager-error-codes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Professional Photoshop Scripting is released!</title>
		<link>https://www.davidebarranca.com/2019/02/professional-photoshop-scripting-v1/</link>
				<comments>https://www.davidebarranca.com/2019/02/professional-photoshop-scripting-v1/#comments</comments>
				<pubDate>Wed, 13 Feb 2019 00:43:32 +0000</pubDate>
		<dc:creator><![CDATA[Davide Barranca]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Photoshop Scripting Course]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3407</guid>
				<description><![CDATA[After 10 months since the launch of the Early Access Program, I am incredibly happy to announce that my book is now complete! Read the full report below.]]></description>
								<content:encoded><![CDATA[<div class="pf-content"><p>After 10 months since the launch of the Early Access Program, I am incredibly happy to announce that my book is now complete! Read the full report below.</p>
<p><span id="more-3407"></span></p>
<p><a href="https://ps-scripting.com/"><img class="aligncenter wp-image-3444 size-large" src="http://www.davidebarranca.com/wp-content/uploads/2019/02/cover-700x700.jpg" alt="Professional Photoshop Scripting book cover" width="610" height="610" srcset="https://www.davidebarranca.com/wp-content/uploads/2019/02/cover-700x700.jpg 700w, https://www.davidebarranca.com/wp-content/uploads/2019/02/cover-150x150.jpg 150w, https://www.davidebarranca.com/wp-content/uploads/2019/02/cover-300x300.jpg 300w, https://www.davidebarranca.com/wp-content/uploads/2019/02/cover.jpg 1465w" sizes="(max-width: 610px) 100vw, 610px" /></a></p>


<h3>The Final Version 1.0!</h3>



<p>The book is now <strong>12 Chapters/409 pages</strong>, fully CC 2019 compliant: compared to the last EAP version 0.2, I&#8217;ve added one Chapter, an Appendix, a proper Acknowledgement section, some extra-content on ActionManager, and given it a final round of proofreading and fixes.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://www.ps-scripting.com/"><img src="http://www.davidebarranca.com/wp-content/uploads/2019/02/open-book-5@2x-700x484.jpg" alt="" class="wp-image-3441" srcset="https://www.davidebarranca.com/wp-content/uploads/2019/02/open-book-5@2x-700x484.jpg 700w, https://www.davidebarranca.com/wp-content/uploads/2019/02/open-book-5@2x-150x104.jpg 150w, https://www.davidebarranca.com/wp-content/uploads/2019/02/open-book-5@2x-300x208.jpg 300w" sizes="(max-width: 700px) 100vw, 700px" /></a></figure></div>



<p>I&#8217;ve also finally credited my dear friend and colleague <a href="http://zettagraphics.com/">Sandra Voelker</a> for her work as the <strong>Technical Editor</strong> – she&#8217;s been providing suggestions and corrections of remarkably high value.</p>



<p>I am also especially honored to tell you that the book contains an awesome <strong>Foreword by Jeffrey Tranberry</strong>, Sr. Product Manager, Digital Imaging at Adobe Systems, and author with Geoff Scott of the book &#8220;<a href="https://www.amazon.com/Power-Speed-Automation-Adobe-Photoshop-ebook/dp/B0083JCBZ2/">Power, Speed &amp; Automation with Adobe Photoshop</a>&#8221; (2012).</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://www.ps-scripting.com/"><img src="http://www.davidebarranca.com/wp-content/uploads/2019/02/open-book-2@2x-700x484.jpg" alt="Professional Photoshop Scripting book sample content" class="wp-image-3442" srcset="https://www.davidebarranca.com/wp-content/uploads/2019/02/open-book-2@2x-700x484.jpg 700w, https://www.davidebarranca.com/wp-content/uploads/2019/02/open-book-2@2x-150x104.jpg 150w, https://www.davidebarranca.com/wp-content/uploads/2019/02/open-book-2@2x-300x208.jpg 300w" sizes="(max-width: 700px) 100vw, 700px" /></a></figure></div>



<p>All in all, I am quite happy about how it has turned out: it took me <em>just</em> two years and a half! Dare I to say, you won&#8217;t find anywhere else such a comprehensive learning path that goes from the basics of the ExtendScript language, up to advanced topics such as ActionManager (~70 pages) and Adobe Generator (~60 pages).</p>



<p>The book V1.0. is for sale right now at <a href="https://www.ps-scripting.com/">PS-Scripting.com</a>, where you can also</p>



<div style="text-align: center; margin-bottom:20px"><a class="btn btn-primary" href="https://www.ps-scripting.com/#get-sample" role="button" style="width: 50%">Get Sample Content!</a></div>



<p>I really hope you&#8217;ll enjoy it! As I wrote in an earlier post, my intention is to match the <a href="https://www.htmlpanelsbook.com/">Adobe Photoshop HTML Panels Development</a> course and add a series of video tutorials: I tested the equipment but stopped for the final rush needed to publish the book.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://www.ps-scripting.com/"><img src="http://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40-700x426.jpg" alt="Professional Photoshop Scripting course video recording" class="wp-image-3360" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40-700x426.jpg 700w, https://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40-150x91.jpg 150w, https://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40-300x183.jpg 300w, https://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40.jpg 1220w" sizes="(max-width: 700px) 100vw, 700px" /></a></figure></div>



<p>Many thanks to all who have contributed, helped, and supported the project buying the EAP <img src="https://s.w.org/images/core/emoji/11.2.0/72x72/1f64f-1f3fb.png" alt="🙏🏻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Your support has been truly appreciated<br>Thank you all!</p>



<div style="text-align: center; margin-bottom:20px"><a class="btn btn-primary" href="https://www.ps-scripting.com/" role="button" style="width: 50%"><img src="https://s.w.org/images/core/emoji/11.2.0/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Book Website</a></div>
</div>]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2019/02/professional-photoshop-scripting-v1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
							</item>
		<item>
		<title>Spectrum CSS Vue.js Component: DropDown</title>
		<link>https://www.davidebarranca.com/2018/12/spectrum-css-vue-js-component-dropdown/</link>
				<comments>https://www.davidebarranca.com/2018/12/spectrum-css-vue-js-component-dropdown/#comments</comments>
				<pubDate>Sun, 16 Dec 2018 10:19:58 +0000</pubDate>
		<dc:creator><![CDATA[Davide Barranca]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[HTML Panels]]></category>
		<category><![CDATA[VueJS]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[spectrum]]></category>
		<category><![CDATA[vue.js]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3378</guid>
				<description><![CDATA[In a previous post I have introduced the recently open-sourced Spectrum CSS. Here, I'll be demonstrating how to use them to build a simple Vue.js DropDown component]]></description>
								<content:encoded><![CDATA[<div class="pf-content">
<p>In a <a href="http://www.davidebarranca.com/2018/11/adobe-spectrum-css-open-sourced/">previous <g class="gr_ gr_402 gr-alert gr_gramm gr_inline_cards gr_run_anim Punctuation only-ins replaceWithoutSep" id="402" data-gr-id="402">post</g></a>&nbsp;I&#8217;ve introduced the recently open-sourced&nbsp;Spectrum CSS. Here, I&#8217;ll be demonstrating how to use them to build a simple Vue.js component: a DropDown menu.</p>



<span id="more-3378"></span>



<p>Spectrum CSS <g class="gr_ gr_4 gr-alert gr_gramm gr_inline_cards gr_run_anim Grammar multiReplace" id="4" data-gr-id="4">are</g> really appealing, but as I&#8217;ve mentioned <a href="http://www.davidebarranca.com/2018/11/adobe-spectrum-css-open-sourced/">earlier</a>, they&#8217;re not bundled with any JavaScript – besides what you may borrow from the <a href="http://opensource.adobe.com/spectrum-css/2.7.2/docs/">online documentation</a> page. While elements such as S<g class="gr_ gr_11 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace" id="11" data-gr-id="11">liders</g> are&nbsp;<em>plug &amp; play</em>, for they actually do use a <code>&lt;input type="range"&gt;</code>&nbsp;wrapped in a lot of finely styled <code>&lt;div&gt;</code> tags, others such as the DropDown are not.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://www.davidebarranca.com/wp-content/uploads/2018/12/dropdown-558x700.gif" alt="" class="wp-image-3381" width="279" height="350" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/12/dropdown-558x700.gif 558w, https://www.davidebarranca.com/wp-content/uploads/2018/12/dropdown-150x188.gif 150w, https://www.davidebarranca.com/wp-content/uploads/2018/12/dropdown-239x300.gif 239w" sizes="(max-width: 279px) 100vw, 279px" /><figcaption>Screenshot from the Spectrum CSS documentation</figcaption></figure></div>



<p>I.e. if you click on a Closed dropdown, it won&#8217;t open (the above is just a screenshot so it&#8217;s pointless to try, but the result would be the same). The reason being that a Spectrum DropDown is not really <g class="gr_ gr_15 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Grammar multiReplace" id="15" data-gr-id="15">a </g><code>&lt;select&gt;</code><g class="gr_ gr_15 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Grammar multiReplace" id="15" data-gr-id="15">&nbsp;element</g>, as you can see in the snippet below:</p>



<figure class="wp-block-image"><img src="http://www.davidebarranca.com/wp-content/uploads/2018/12/code-700x581.png" alt="" class="wp-image-3385" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/12/code-700x581.png 700w, https://www.davidebarranca.com/wp-content/uploads/2018/12/code-150x124.png 150w, https://www.davidebarranca.com/wp-content/uploads/2018/12/code-300x249.png 300w, https://www.davidebarranca.com/wp-content/uploads/2018/12/code.png 1400w" sizes="(max-width: 700px) 100vw, 700px" /><figcaption>The Spectrum code that renders a DropDown</figcaption></figure>



<p>As far as I get, re-creating an element from scratch is a standard practice to avoid rendering differences between browsers (<g class="gr_ gr_108 gr-alert gr_gramm gr_inline_cards gr_run_anim Style multiReplace" id="108" data-gr-id="108">the </g><code>&lt;select&gt;</code><g class="gr_ gr_108 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="108" data-gr-id="108">&nbsp;is</g> a good example here).</p>



<p>Anyways: no <code>&lt;select&gt;</code> means no default behavior on click, change, etc. In other words, you are the one in charge of populating the <code>&lt;div&gt;</code> elements above&nbsp;and adding relevant event handlers so that the DropDown stops being a nice but still and useless object.</p>



<p>This is a perfect test case for encapsulating everything in a <strong>Vue.js Component</strong>! The only drawback is that I don&#8217;t feel particularly comfortable with the idea of creating Components from scratch. All my CEP Panels use Vue.js now, that&#8217;s true, but frankly in a very simple and not over-engineered fashion: I&#8217;ve always used one <g class="gr_ gr_6 gr-alert gr_gramm gr_inline_cards gr_run_anim Style multiReplace" id="6" data-gr-id="6">shared </g><code>data</code><g class="gr_ gr_6 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="6" data-gr-id="6">,</g> the farther I&#8217;ve ventured into fanciness was setting up an Event Hub.</p>



<p><g class="gr_ gr_215 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling multiReplace" id="215" data-gr-id="215">Thanks</g> god <g class="gr_ gr_213 gr-alert gr_gramm gr_inline_cards gr_run_anim Grammar multiReplace" id="213" data-gr-id="213">I&#8217;ve</g> a <g class="gr_ gr_214 gr-alert gr_gramm gr_inline_cards gr_run_anim Punctuation multiReplace" id="214" data-gr-id="214">PhD</g> in <em>Copy&amp;Paste</em>, so I&#8217;ve been able to adapt <a href="https://vuejsexamples.com/a-prettier-way-to-display-select-boxes/">this one</a>:</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://www.davidebarranca.com/wp-content/uploads/2018/12/display-select-boxes.gif" alt="" class="wp-image-3387" width="316" height="176"/></figure></div>



<p>&#8230; into a proper Vue Component that wraps the Spectrum DropDown original markup. The <code>.vue</code>&nbsp;file I came up with is as follows:</p>



<div class="ghostkit-gist" data-url="https://gist.github.com/undavide/ec5c7ef0d83b5d14252a963e761896f7" data-file="" data-caption="" data-show-footer="true" data-show-line-numbers="true"></div>



<p>I won&#8217;t go too much into the details here. If you look at <g class="gr_ gr_5 gr-alert gr_gramm gr_inline_cards gr_run_anim Style multiReplace" id="5" data-gr-id="5">the </g><code>&lt;template&gt;</code><g class="gr_ gr_5 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="5" data-gr-id="5">&nbsp;tag</g> and compare it with the original Spectrum html, you can spot the differences: I&#8217;ve added a couple of classes that depend on the selected item or <g class="gr_ gr_6 gr-alert gr_gramm gr_inline_cards gr_run_anim Style multiReplace" id="6" data-gr-id="6">the </g><code>showMenu</code><g class="gr_ gr_6 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="6" data-gr-id="6">&nbsp;</g><g class="gr_ gr_4 gr-alert gr_gramm gr_inline_cards gr_run_anim Punctuation only-del replaceWithoutSep" id="4" data-gr-id="4"><g class="gr_ gr_6 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Style multiReplace" id="6" data-gr-id="6">boolean</g>,</g> and used a <code>v-for</code>&nbsp;loop to populate the options.</p>



<p>The <code>&lt;script&gt;</code>&nbsp;tag is where the actual logic belongs: I&#8217;ve added two methods, one to show the opened dropdown and one to emit an event to the parent when something is selected. From the <code>props</code>&nbsp;you&#8217;re able to tell how to consume such element, e.g.:</p>



<pre class="crayon-plain-tag">&lt;drop-down :options="arrayOfObjects" v-on:updateOption="methodToRunOnSelect" placeholder="Select a thing..."/><drop-down :options="arrayOfObjects" v-on:updateoption="methodToRunOnSelect" placeholder="Select a thing..."></pre>



<p>The result is this one:</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img src="http://www.davidebarranca.com/wp-content/uploads/2018/12/WorkingDropDown.gif" alt="" class="wp-image-3390" width="413" height="380"/><figcaption>The working DropDown Vue.js Component<br>(wife was unimpressed)</figcaption></figure></div>



<p>It is quite bare, I may want to add transitions and such&#8230; but it works!</p>



<p>To tell you the truth, I thought I couldn&#8217;t be able to make it: I had a look at proper Vue.js UI Kits (like <a href="https://vuikit.js.org/">this one</a>) and they exceed, by far, my understanding. Luckily I&#8217;ve been able to borrow code and adapt it, so I may be doing it again in the future for other elements that I would need.</p>



<p>If you&#8217;re up for the same thing, or you know how to make my code better, please let me know in the comments. Bye!</p>
</div>]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2018/12/spectrum-css-vue-js-component-dropdown/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
							</item>
		<item>
		<title>ESTK to be replaced by a Visual Studio Code plug-in</title>
		<link>https://www.davidebarranca.com/2018/12/estk-to-be-replaced-by-a-visual-studio-code-plug-in/</link>
				<comments>https://www.davidebarranca.com/2018/12/estk-to-be-replaced-by-a-visual-studio-code-plug-in/#comments</comments>
				<pubDate>Wed, 12 Dec 2018 22:28:31 +0000</pubDate>
		<dc:creator><![CDATA[Davide Barranca]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[ESTK]]></category>
		<category><![CDATA[Visual Studio Code]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3366</guid>
				<description><![CDATA[Please do yourself a favour and read this Medium post by Lead Technical Evangelist Ash Ryan Arnwine about the future of the ExtendScript ToolKit.]]></description>
								<content:encoded><![CDATA[<div class="pf-content">
<p>Please do yourself a <g class="gr_ gr_165 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling multiReplace" id="165" data-gr-id="165">favour</g> and read <a href="https://medium.com/adobetech/the-future-of-extendscript-development-a-vscode-plugin-2d8d0172a357">this Medium post</a> by <em>Lead Technical Evangelist</em> Ash Ryan Arnwine about the future of the ExtendScript ToolKit.</p>



<span id="more-3366"></span>



<p>I&#8217;ll keep it short because I urge you to read the&nbsp;<a href="https://medium.com/adobetech/the-future-of-extendscript-development-a-vscode-plugin-2d8d0172a357">original news</a>. No ETA yet, but ESTK <del>is gonna die soon</del>&nbsp;won&#8217;t be re-written to comply with Apple&#8217;s 32bit applications ban (macOS-next). Nobody in their right mind would have thought it anyway, but we&#8217;ve got an official confirmation.</p>



<p><em>[confetti fall from the sky]</em></p>



<p>Go download <a href="https://code.visualstudio.com/">Visual Studio Code</a> and familiarize with it, while waiting for the new Adobe Scripting plugin (Mac/Win compatible) to be released.</p>



<iframe width="700" height="394" src="https://www.youtube.com/embed/Wq7zF9yyd0I" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2018/12/estk-to-be-replaced-by-a-visual-studio-code-plug-in/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
							</item>
		<item>
		<title>Adobe Spectrum CSS open-sourced!</title>
		<link>https://www.davidebarranca.com/2018/11/adobe-spectrum-css-open-sourced/</link>
				<comments>https://www.davidebarranca.com/2018/11/adobe-spectrum-css-open-sourced/#respond</comments>
				<pubDate>Sun, 18 Nov 2018 10:37:18 +0000</pubDate>
		<dc:creator><![CDATA[Davide Barranca]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[HTML Panels]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3356</guid>
				<description><![CDATA[In case you've missed the news, Adobe has open-sourced the Spectrum CSS – the stylesheets they're using for Photoshop's own CEP Panels ]]></description>
								<content:encoded><![CDATA[<div class="pf-content">In case you&#8217;ve missed the news, Adobe has open-sourced the Spectrum CSS – the stylesheets they&#8217;re using for Photoshop&#8217;s own CEP Panels <img src="https://s.w.org/images/core/emoji/11.2.0/72x72/1f37e.png" alt="🍾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> The GitHub repository is <a href="https://github.com/adobe/spectrum-css">found here</a>.</p>
<p><span id="more-3356"></span></p>
<p><a href="http://www.davidebarranca.com/wp-content/uploads/2018/11/Spectrum.jpg"><img class="aligncenter size-full wp-image-3362" src="http://www.davidebarranca.com/wp-content/uploads/2018/11/Spectrum.jpg" alt="" width="1220" height="635" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/11/Spectrum.jpg 1220w, https://www.davidebarranca.com/wp-content/uploads/2018/11/Spectrum-150x78.jpg 150w, https://www.davidebarranca.com/wp-content/uploads/2018/11/Spectrum-300x156.jpg 300w, https://www.davidebarranca.com/wp-content/uploads/2018/11/Spectrum-700x364.jpg 700w" sizes="(max-width: 1220px) 100vw, 1220px" /></a></p>
<p>The CSS is demoed <a href="http://opensource.adobe.com/spectrum-css/2.6.0/docs">in this page</a>, where you can pick four themes (<em>Lighter, Light, Dark, Darkest</em>) in four scales (<em>Medium, Large, Medium diff, Large diff</em>).</p>
<p>The component list, compared to <a href="http://topcoat.io/topcoat/">Topcoat </a>which I&#8217;ve been using extensively in my projects, is quite larger – and frankly perhaps a tad overkill for CEP Panels, e.g. I doubt I would ever use a Calendar. But I&#8217;ve never complained of abundance: nice and very welcomed features are all kind of sliders, including ranges, and split-buttons, steppers, etc.</p>
<p><a href="http://www.davidebarranca.com/wp-content/uploads/2018/11/slider.jpg"><img class="aligncenter size-full wp-image-3364" src="http://www.davidebarranca.com/wp-content/uploads/2018/11/slider.jpg" alt="" width="1220" height="443" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/11/slider.jpg 1220w, https://www.davidebarranca.com/wp-content/uploads/2018/11/slider-150x54.jpg 150w, https://www.davidebarranca.com/wp-content/uploads/2018/11/slider-300x109.jpg 300w, https://www.davidebarranca.com/wp-content/uploads/2018/11/slider-700x254.jpg 700w" sizes="(max-width: 1220px) 100vw, 1220px" /></a></p>
<p>You can read in the <a href="https://github.com/adobe/spectrum-css#where-is-the-javascript">documentation page</a> that:</p>
<blockquote><p>We have found that JavaScript is where a framework or library quickly becomes opinionated and stops being easy to use with or across other frameworks. To avoid this problem, Spectrum CSS avoids implementation details that require JavaScript. Where an element might require multiple states, the documentation here will simply show all the states in a flat, static example. We leave it to the frameworks implementing Spectrum CSS to create JavaScript that suits their needs.</p></blockquote>
<p>Which means that we&#8217;re left on our own, but that&#8217;s not a big issue I suppose – hopefully there will be a Vue.js Spectrum components implementation in the near future 🙂</p>
<h2>The state of the Blog</h2>
<p>That was it for Spectrum CSS, I take the chance here now to inform you about blog updates, etc.</p>
<p>As a matter of fact, I&#8217;ve slowed down things quite a bit as you&#8217;ve noticed: I took fewer Panel jobs and tried to focus on books and courses. I&#8217;ve had greatly unwelcome issues with my house&#8217;s restoration works (started a couple of years ago – both the works and the issues&#8230;) that proved to be a time/concentration/money sink. As a result, progress on development-related tasks have been erratic, to say the least.</p>
<p>Recently, I try to record a couple of test videos to be bundled with the <a href="https://www.ps-scripting.com/">Professional Photoshop Scripting course</a>, which will look more or less like this:</p>
<p><img class="aligncenter wp-image-3360 size-full" src="http://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40.jpg" alt="" width="1220" height="743" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40.jpg 1220w, https://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40-150x91.jpg 150w, https://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40-300x183.jpg 300w, https://www.davidebarranca.com/wp-content/uploads/2018/11/DB-2018-11-18-at-11.23.40-700x426.jpg 700w" sizes="(max-width: 1220px) 100vw, 1220px" /></p>
<p>There is no ETA yet – I will be able to tell you more as soon as I get the estimate for the roofing works, which will be followed by the insulation works, then the stairs, etc. Hopefully, before my hair gets completely gray <img src="https://s.w.org/images/core/emoji/11.2.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Thanks for reading and for your support!</p></div>
]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2018/11/adobe-spectrum-css-open-sourced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Professional Photoshop Scripting EAP Update</title>
		<link>https://www.davidebarranca.com/2018/06/professional-photoshop-scripting-eap-update/</link>
				<comments>https://www.davidebarranca.com/2018/06/professional-photoshop-scripting-eap-update/#comments</comments>
				<pubDate>Mon, 11 Jun 2018 14:21:58 +0000</pubDate>
		<dc:creator><![CDATA[Davide Barranca]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[EAP]]></category>
		<category><![CDATA[Professional Photoshop Scripting]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3348</guid>
				<description><![CDATA[I've added 60 pages to accommodate an amazing new chapter on Adobe Generator! The book is now 388 pages strong and packed with exclusive content found nowhere else.

]]></description>
								<content:encoded><![CDATA[<div class="pf-content">I&#8217;ve added 60 pages to accommodate an amazing new chapter on Adobe Generator! The <a href="https://www.ps-scripting.com/">book</a> is now 388 pages strong and packed with exclusive content found <em>nowhere else<img src="https://s.w.org/images/core/emoji/11.2.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /></em>.</p>
<p><span id="more-3348"></span></p>
<p><a href="http://www.davidebarranca.com/wp-content/uploads/2018/06/open-book-5.jpg"><img class="aligncenter size-large wp-image-3349" src="http://www.davidebarranca.com/wp-content/uploads/2018/06/open-book-5-700x484.jpg" alt="" width="610" height="422" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/06/open-book-5-700x484.jpg 700w, https://www.davidebarranca.com/wp-content/uploads/2018/06/open-book-5-150x104.jpg 150w, https://www.davidebarranca.com/wp-content/uploads/2018/06/open-book-5-300x208.jpg 300w, https://www.davidebarranca.com/wp-content/uploads/2018/06/open-book-5.jpg 1200w" sizes="(max-width: 610px) 100vw, 610px" /></a></p>
<p>Adobe Generator is an amazing and very little known technology available in Photoshop since version CC. It features a Node.js instance running in the background that you can use in a variety of interesting ways.</p>
<p><a href="http://www.davidebarranca.com/wp-content/uploads/2018/06/RkFdg4PI_400x400.png"><img class="alignright size-thumbnail wp-image-3350" src="http://www.davidebarranca.com/wp-content/uploads/2018/06/RkFdg4PI_400x400-150x150.png" alt="" width="150" height="150" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/06/RkFdg4PI_400x400-150x150.png 150w, https://www.davidebarranca.com/wp-content/uploads/2018/06/RkFdg4PI_400x400-300x300.png 300w, https://www.davidebarranca.com/wp-content/uploads/2018/06/RkFdg4PI_400x400.png 400w" sizes="(max-width: 150px) 100vw, 150px" /></a>I&#8217;ve built several Generator Plug-ins expressly for this book: Pixmap extraction, Artificial Intelligence via an external service, Photoshop remote control from the Browser, bi-directional Socket communication, just to name a few. I&#8217;m sure you&#8217;ll enjoy them! Did you know that Adobe Generator has got its own icon? 🙂</p>
<p>This marks Professional Photoshop Scripting <strong>EAP version 0.2</strong> – I would say that the main content is already in place. I plan to gather minor topics in one or two chapters, then proceed with the publication. You can still <a href="https://www.ps-scripting.com/">buy it at a highly discounted price now</a>!</p>
<h3>The F<strong>inal Product</strong>:</h3>
<ul>
<li>Final Book + Code, <strong>$149</strong></li>
<li>Final Book + Videos + Code, <strong>$249</strong></li>
<li>Final Book + Videos + Code (Team/Enterprise License), <strong>$499</strong></li>
</ul>
<h3>Early Access Program (current)</h3>
<ul>
<li>Early Access Book + Code, <strong>$99</strong></li>
<li>Early Access Book + Code (Team/Enterprise License), <strong>$199</strong></li>
<li>Discount Coupon for the Videos when they will be recorded</li>
</ul>
<p>Visit <a href="https://www.ps-scripting.com/">ps-scripting.com</a> for details. Cheers!</div>
]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2018/06/professional-photoshop-scripting-eap-update/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
							</item>
		<item>
		<title>Automated check for corrupted image files with Python and ImageMagick</title>
		<link>https://www.davidebarranca.com/2018/05/automated-check-for-corrupted-image-files-with-python-and-imagemagick/</link>
				<comments>https://www.davidebarranca.com/2018/05/automated-check-for-corrupted-image-files-with-python-and-imagemagick/#comments</comments>
				<pubDate>Mon, 07 May 2018 23:20:19 +0000</pubDate>
		<dc:creator><![CDATA[Davide Barranca]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[corrupted]]></category>
		<category><![CDATA[image python]]></category>
		<category><![CDATA[imagemagick]]></category>
		<category><![CDATA[integrity check]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3337</guid>
				<description><![CDATA[How do you check if an image file (tiff, psd, psb) is corrupted, other than looking at its thumbnail with Bridge, or opening it on Photoshop? With a small Python script and ImageMagick! Read along.]]></description>
								<content:encoded><![CDATA[<div class="pf-content">How do you check if an image file (tiff, psd, psb) is corrupted, other than looking at its thumbnail with Bridge, or opening it on Photoshop? With a small Python script and ImageMagick! Read along.<br />
<span id="more-3337"></span></p>
<h2>Background</h2>
<p>The client of mine I work as a retoucher for had some problems with the so-called <em>Data Migration</em> (the dull, time consuming, and error prone process of transferring a lifetime backup from old, once very expensive external drives to a set of new, somehow still equally expensive external drives). As a result, he got some corrupted files here and there in the destination drives – that&#8217;s the reason why you <em>migrate</em> data: the source has insufficient capacity, it has become unstable, obsolete, or both combined.</p>
<p>Problem is that we&#8217;re talking about several TB of data, mostly as .psb files (ranging from about 1 up to 20GB each), and it goes without saying that opening them all in Photoshop is not an option; nor you can trust Adobe Bridge thumbnails – provided that you&#8217;ve set the preferences to render previews for big files too – because it&#8217;s a manual process anyway. Even if I&#8217;m paid by the hour, staring at thumbs is not my preferred way to get blind.</p>
<p>After some research, I&#8217;ve found no way (other than the one I&#8217;m about to describe) to check for psd/psb files corruption in an automated fashion. Which seems to me quite odd – if you have better, i.e. faster and/or simpler, solutions, please do suggest them to me in the comments below.</p>
<h2>What you need</h2>
<p><a href="https://www.python.org/download/releases/3.0/">Python 3</a>, and <a href="https://www.imagemagick.org/">ImageMagick</a>. Both will work either on Mac or Windows: I&#8217;ve no experience of them on the latter platform, so I will just assume that you will be successful in following the installation instruction provided in the official home pages. PC owners: read at least the part relative to ImageMagick. Mac users: read it all.</p>
<h3>Python 3</h3>
<p>If you&#8217;re on a Mac like me, you already have Python installed. Chances are that it is version 2.7, or another one but 3. Open the Terminal and type:</p><pre class="crayon-plain-tag">$ python --version
Python 2.7.10</pre><p>This is what I still get after having installed Python 3.6 myself, via <a href="https://brew.sh/index_it">Homebrew</a>. I&#8217;m no Python expert, so it took me some Google time to understand that on a Mac you can still have the <code>python</code> command pointing to the System&#8217;s old 2.7 version, even if you&#8217;ve freshly installed the new one.</p>
<p>Solutions involve manually changing symlinks (power users advise against it), or using one of the available packages to create isolate Python environments (e.g. <a href="https://virtualenv.pypa.io/en/stable/">virtualenv</a>, <a href="https://github.com/pyenv/pyenv">pyenv</a>, etc. A list of them is found <a href="https://stackoverflow.com/questions/41573587/what-is-the-difference-between-venv-pyvenv-pyenv-virtualenv-virtualenvwrappe">here</a>). I couldn&#8217;t make neither of them to work in a reasonable amount of time, so I&#8217;ve resorted to simply use the <code>python3</code> command, e.g.</p><pre class="crayon-plain-tag">$ python3 --version
Python 3.6.2</pre><p></p>
<h3>ImageMagick</h3>
<p><a href="https://www.imagemagick.org/">ImageMagick</a> is a multiplatform, open source commandline utility that performs a huge amount of tasks on all kinds of image files. I&#8217;ve installed via Homebrew, but it turns out that, at least on the Mac, it doesn&#8217;t come by default with the proper Delegates (aka Libraries) to deal with .psb files, which is what I needed the most.</p>
<p>Finding the proper way to do so proved almost impossible to me: while reading the source code documentation (the last thing I wanted to do was to compile it from the source), I&#8217;ve discovered that via Homebrew you can list all the possible installation options for a package:</p><pre class="crayon-plain-tag">$ brew options imagemagick

--with-fftw
	Compile with FFTW support
--with-fontconfig
	Build with fontconfig support
--with-ghostscript
	Build with ghostscript support
--with-hdri
	Compile with HDRI support
--with-liblqr
	Build with liblqr support
--with-librsvg
	Build with librsvg support
--with-libwmf
	Build with libwmf support
--with-little-cms
	Build with little-cms support
--with-little-cms2
	Build with little-cms2 support
--with-opencl
	Compile with OpenCL support
--with-openexr
	Build with openexr support
--with-openjpeg
	Build with openjpeg support
--with-openmp
	Compile with OpenMP support
--with-pango
	Build with pango support
--with-perl
	Compile with PerlMagick
--with-webp
	Build with webp support
--with-x11
	Build with x11 support
--with-zero-configuration
	Disables depending on XML configuration files
--without-freetype
	Build without freetype support
--without-jpeg
	Build without jpeg support
--without-libpng
	Build without libpng support
--without-libtiff
	Build without libtiff support
--without-magick-plus-plus
	disable build/install of Magick++
--without-modules
	Disable support for dynamically loadable modules
--without-threads
	Disable threads support
--HEAD
	Install HEAD version</pre><p>So, after a first installation (without psb support), with no clear hint about the proper option(s) to use in my case, and even less spare time to test, I&#8217;ve chained them all – at least the seemingly appropriate ones, with little worries about being redundant. At all events, no one was watching me, nor would have ever known <img src="https://s.w.org/images/core/emoji/11.2.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> The embarrassing line I&#8217;ve used is:</p><pre class="crayon-plain-tag">brew reinstall imagemagick  --with-fftw --with-fontconfig --with-ghostscript --with-hdri --with-libde265 --with-liblqr --with-librsvg --with-libwmf --with-little-cms --with-little-cms2 --with-opencl --with-openexr --with-openjpeg --with-openmp --with-pango --with-perl --with-webp --with-x11</pre><p>It worked, so I was a happy camper.</p>
<h2>The Python Script</h2>
<p>Which is far from perfect, but it does the job – I&#8217;m sure that a proper Python developer can make it much better: it comes from surgical copy&amp;paste from various Google Search result, plus a very light editing on my side.</p><pre class="crayon-plain-tag">import os
from subprocess import Popen, PIPE

folderToCheck = '/Volumes/16TB/whatever/path'
fileExtension = '.psb'

def checkImage(fn):
	proc = Popen(['identify', '-verbose', fn], stdout=PIPE, stderr=PIPE)
	out, err = proc.communicate()
	exitcode = proc.returncode
	return exitcode, out, err

for directory, subdirectories, files, in os.walk(folderToCheck):
	for file in files:
		if file.endswith(fileExtension):
			filePath = os.path.join(directory, file)
			code, output, error = checkImage(filePath)
			if str(code) !="0" or str(error, "utf-8") != "":
				print("ERROR " + filePath)
			else:
				print("OK " + filePath)

print("-------------- DONE --------------");</pre><p></p>
<h3>How it works</h3>
<p>The basic is the <code>identify</code> call (that comes from ImageMagick), which is set to <code>-verbose</code>. This is what performs the check: the rest is just looping through the filesystem, looking for the appropriate file extension, and logging a message.</p>
<h3>How to use it</h3>
<p>Save this on a file with a <code>.py</code> extension, and then run it with the <code>python3</code> command on a terminal, e.g.</p><pre class="crayon-plain-tag">$ python3 check.py</pre><p>Before doing so, do change the content of the <code>folderToCheck</code> variable with an actual folder on your disk (with absolute path), and the <code>fileExtension</code> too: I&#8217;ve used <code>.psb</code>, but you can change it to <code>.psd</code>, <code>.tif</code>, <code>.jpg</code>, etc. As a result you&#8217;ll get a log in the Terminal; I&#8217;ve used a nifty, cheap application called <a href="https://coderunnerapp.com/">Code Runner</a> for such tests, and this is the result:</p>
<p><a href="http://www.davidebarranca.com/wp-content/uploads/2018/05/coderunner.png"><img class="aligncenter size-large wp-image-3339" src="http://www.davidebarranca.com/wp-content/uploads/2018/05/coderunner-700x426.png" alt="" width="610" height="371" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/05/coderunner-700x426.png 700w, https://www.davidebarranca.com/wp-content/uploads/2018/05/coderunner-150x91.png 150w, https://www.davidebarranca.com/wp-content/uploads/2018/05/coderunner-300x183.png 300w" sizes="(max-width: 610px) 100vw, 610px" /></a></p>
<p>As you see, I&#8217;m just logging OK/ERROR with the path, very basic. What to do with this newly acquired piece of knowledge is up to you.</p>
<p>Please note that:</p>
<ul>
<li>The script processes nested folders too.</li>
<li>It is <em>awfully</em> <em>slow</em> and hungry: it eats CPU cycles and RAM. But it&#8217;s automatic, so heck!</li>
<li>The file extension is case sensitive, so <code>".JPG"</code> is different from <code>".jpg"</code>.</li>
</ul>
<h3>How to make it better</h3>
<p>Few suggestions for the skilled Python developer (which I&#8217;m not, alas)</p>
<ul>
<li>Write on a log file instead of the console</li>
<li>Keep track of the processing status and resume from there</li>
<li>Display the advancement status (say, &#8220;image 34 of 320&#8221;)</li>
<li>Make the file extension case insensitive.</li>
</ul>
<p>If you know how to do any of this, please share your knowledge in the comments! Thank you!</p></div>
]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2018/05/automated-check-for-corrupted-image-files-with-python-and-imagemagick/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
							</item>
		<item>
		<title>Professional Photoshop Scripting Course &#8211; Early Access Program</title>
		<link>https://www.davidebarranca.com/2018/04/professional-photoshop-scripting-course-early-access-program/</link>
				<comments>https://www.davidebarranca.com/2018/04/professional-photoshop-scripting-course-early-access-program/#comments</comments>
				<pubDate>Fri, 20 Apr 2018 13:05:04 +0000</pubDate>
		<dc:creator><![CDATA[Davide Barranca]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Photoshop]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3308</guid>
				<description><![CDATA[I'm glad to announce that I have opened the Early Access Program to my new and very much awaited Professional Photoshop Scripting course!]]></description>
								<content:encoded><![CDATA[<div class="pf-content">I&#8217;m glad to announce that I have opened the <em>Early Access Program</em> to my new and very much awaited <strong>Professional Photoshop Scripting</strong> course! Read along.</p>
<p><span id="more-3308"></span></p>
<p>The course that I have <a href="http://www.davidebarranca.com/2017/08/photoshop-scripting-course-update-august-2017/">announced</a> in the past is now near completion: I would say 3/4 of the topics that I plan to cover have been written and edited – I&#8217;m at page 339 and counting! It took me way more than expected, though.</p>
<p><a href="https://www.ps-scripting.com"><img class="aligncenter size-large wp-image-3328" src="http://www.davidebarranca.com/wp-content/uploads/2018/04/PSScriptingCover-light-638x700.png" alt="" width="610" height="669" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/04/PSScriptingCover-light-638x700.png 638w, https://www.davidebarranca.com/wp-content/uploads/2018/04/PSScriptingCover-light-150x165.png 150w, https://www.davidebarranca.com/wp-content/uploads/2018/04/PSScriptingCover-light-273x300.png 273w, https://www.davidebarranca.com/wp-content/uploads/2018/04/PSScriptingCover-light.png 900w" sizes="(max-width: 610px) 100vw, 610px" /></a></p>
<h2>Early Access Program</h2>
<p>In a fashion that is nowadays quite common among technical writers, I have opened what is referred to as an<em> &#8220;Early Access Program&#8221;</em>. If you&#8217;re not familiar with it, the idea is that you are able to read the book as I finish writing it. The advantages:</p>
<ul>
<li>You don&#8217;t have to wait for the final book to get started.</li>
<li>You&#8217;ll be sent a notification and download link as soon as further updates are ready (new Chapters, fixes, etc).</li>
<li>You can get the course at a ludicrously discounted price now, compared to book&#8217;s street price when it&#8217;ll be published.</li>
<li>You can contribute to the writing process with suggestions and feedback.</li>
</ul>
<p>Sounds good?</p>
<h2>Full Course and Pricing</h2>
<p>This one will follow exactly the same price/bundle scheme of my previous <a href="http://htmlpanelsbook.com/">Adobe Photoshop HTML Panels Development</a> course.</p>
<h3>The F<strong>inal Product</strong>:</h3>
<ul>
<li>Final Book + Code, <strong>$149</strong></li>
<li>Final Book + Videos + Code, <strong>$249</strong></li>
<li>Final Book + Videos + Code (Team/Enterprise License), <strong>$499</strong></li>
</ul>
<h3>Early Access Program (current)</h3>
<ul>
<li>Early Access Book + Code, <strong>$99</strong></li>
<li>Early Access Book + Code (Team/Enterprise License), <strong>$199</strong></li>
<li>Discount Coupon for the Videos when they will be recorded</li>
</ul>
<p>To be clear, the Early Access Program entitles you to all the work-in-progress updates, and the Final Release version too. Since I will record the videos when the book is completed, you&#8217;ll have access the video content as an optional upgrade.</p>
<h2>Launching ps-scripting.com</h2>
<p>The course is for sale since April 23rd 2018, please head to the dedicated website <a href="https://www.ps-scripting.com/">www.ps-scripting.com</a>! And help me to spread the world.</p>
<p><button class="btn btn-primary" type="button" onclick="window.location.href='https://www.ps-scripting.com'">Go to ps-scripting.com!</button></p>
</div>
]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2018/04/professional-photoshop-scripting-course-early-access-program/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
							</item>
		<item>
		<title>Luminosity Masks: How Does It Really Work?</title>
		<link>https://www.davidebarranca.com/2018/03/luminosity-masks-how-does-it-really-work/</link>
				<comments>https://www.davidebarranca.com/2018/03/luminosity-masks-how-does-it-really-work/#comments</comments>
				<pubDate>Sat, 10 Mar 2018 13:56:13 +0000</pubDate>
		<dc:creator><![CDATA[Scott Murdock]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Luminosity Mask]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3272</guid>
				<description><![CDATA[In this guest post, the Photoshop developer Scott Murdock tackles the apparently familiar topic of Luminosity Masks – with very interesting findings for anybody using them. Enjoy!

Everywhere you go you read about Luminosity Masks – I'm really surprised it doesn't have its own Wikipedia Page! (Maybe I'll take care of that).  It is truly a great tool to have in your toolbox, very powerful when used correctly. It's greatness by simplicity. But how does it works? Not in the sense "how to create it", but what really happens behind the scenes?]]></description>
								<content:encoded><![CDATA[<div class="pf-content"> In this <strong>guest post</strong>, the Photoshop Plug In developer <a href="https://cc-extensions.com/">Scott Murdock</a> tackles the apparently familiar topic of Luminosity Masks – with very interesting findings for anybody using them. Enjoy!</p>
<p>Everywhere you go you read about Luminosity Masks – I&#8217;m really surprised it doesn&#8217;t have its own Wikipedia Page! (Maybe I&#8217;ll take care of that).  It is truly a great tool to have in your toolbox, very powerful when used correctly. It&#8217;s greatness by simplicity. But how does it works? Not in the sense &#8220;how to create it&#8221;, but what really happens behind the scenes?</p>
<p>Well, let&#8217;s try answering that question, and doing it in a deep (and hopefully interesting) way.</p>
<h2><span id="more-3272"></span>The Basics</h2>
<h3>Step 1 – It all starts with a Grayscale image</h3>
<p>You can have images with all the colors in the world, but the first step in creating a Luminosity Mask is getting a Grayscale image (a Single Channel Image). In most cases, it means to calculate the Luminosity Channel of the given image. Each one has his own recipe: most actions/panels based solutions use Photoshop Luminosity selection (<code>Ctrl + Left Mouse Click</code> on the RGB Channel in the Channels Palette).</p>
<p><img class="aligncenter size-large wp-image-3267" src="http://www.davidebarranca.com/wp-content/uploads/2018/03/GrayScaleImageGeneration-700x216.png" alt="" width="610" height="188" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/03/GrayScaleImageGeneration-700x216.png 700w, https://www.davidebarranca.com/wp-content/uploads/2018/03/GrayScaleImageGeneration-150x46.png 150w, https://www.davidebarranca.com/wp-content/uploads/2018/03/GrayScaleImageGeneration-300x93.png 300w, https://www.davidebarranca.com/wp-content/uploads/2018/03/GrayScaleImageGeneration.png 1041w" sizes="(max-width: 610px) 100vw, 610px" /></p>
<p>By the way, any &#8220;Single Channel&#8221; image can do here. The best choice (i.e. Channel, or processed grayscale layer) is the one where the image features you want to select are more evident and easily separable from the rest – in the above example the trees are well distinct from the sky for instance, and the lake&#8217;s gradient below helps as well.</p>
<p>The Channel of choice could be the Blue from RGB, the Magenta from CMYK, or a combination of all the 10 Channels an image provides (R, G, B, C, M ,Y, K, L, a, b): whatever, be creative. In case of a grayscale image, life is easier, just move over to Step 2.</p>
<h3>Step 2 – Apply Pixel Wise Transformation on the Grayscale Image</h3>
<p>Now, this is where the magic happens. The idea is very simple: given the Gray Scale image as input, the output per pixel is a function of its value only.</p>
<p>Well, this sentence might take some of us back to horrible school days but it is really simple when you think about it. Pixel comes in, states its value, and gets an output value based only on its value alone, and voilà! We have a Luminosity Mask.</p>
<p>The name says it all, the Mask depends solely on the Luminosity (Tonal Range value) of the pixels. It has nothing to do with their location, not their surrounding pixels. Just using the Luminosity value. Nothing more, nothing less – power by simplicity.</p>
<p><img class="aligncenter size-large wp-image-3276" src="http://www.davidebarranca.com/wp-content/uploads/2018/03/MaskGenerator-700x351.png" alt="" width="610" height="306" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/03/MaskGenerator-700x351.png 700w, https://www.davidebarranca.com/wp-content/uploads/2018/03/MaskGenerator-150x75.png 150w, https://www.davidebarranca.com/wp-content/uploads/2018/03/MaskGenerator-300x151.png 300w, https://www.davidebarranca.com/wp-content/uploads/2018/03/MaskGenerator.png 801w" sizes="(max-width: 610px) 100vw, 610px" /></p>
<p>&nbsp;</p>
<p>The above Figure represents a <strong>Mask Generator</strong>.</p>
<p>The input pixels values are in the upper section. They get processed by this <em>black box</em>, which operates based on a function \(f \left( x \right)\) and the pixel output that is generated is found in the bottom section. At the output, everything is black (Low Values) with the exception of pixels around 128, that are mapped to white (High Values). This suggests that a &#8220;Midtones Mask&#8221; has been generated.</p>
<p>Simple fact: images are <em>discrete</em> in their values. For instance, in the case of an 8bit image, the discrete values are in the range {0, 1, &#8230;, 254, 255}, occupying 256 available slots, i.e. \({2}^{8}\).</p>
<p><strong>So a <em>Mask Generator</em> (Luminosity Mask Generator) has to designate an output value for each value in the input discrete <em>domain</em>.</strong></p>
<p>If the output image is also, let&#8217;s say 8 Bit, then the output values are also within the range {0, 1, &#8230;, 254, 255} which means one need to map 256 values into 256 values. In the Computer Science world this process is done using a <a href="https://en.wikipedia.org/wiki/Lookup_table">Look Up Table (LUT)</a>.</p>
<p>Over time some masks got their own naming according to the properties of the values assigned:</p>
<ul>
<li>If it designates high output values to low input values, and low values to the rest it is called <strong>Shadows Mask Generator</strong>. The output mask is called <strong>Shadows Luminosity Mask</strong> which reveals shadows and blocks everything else.</li>
<li>If it designates high output values to mid input values, and low values to the rest it is called <strong>Midtones Mask Generator</strong>. The output mask is called <strong>Midtones Luminosity Mask</strong> which reveals midtones and blocks everything else.</li>
<li>If it designates high output values to high input values, and low values to the rest it is called <strong>Highlights Mask Generator</strong>. The output mask is called <strong>Highlights Luminosity Mask</strong> which reveals highlights and blocks everything else.</li>
</ul>
<p>This is the mask generation transformation (aka <em>mapping</em>), and basically this is all theory there is to know.</p>
<h3>Examples</h3>
<p>Let&#8217;s do some stretching by examining two simple examples of main building blocks in the Luminosity Mask world. We will assume an 8bit image, hence input and output pixel values are given by {0, 1, 2, &#8230;, 254, 255}.</p>
<p>The most basic Mapping / LUT / Function (all are different names to the same idea) is the <em>identity</em> mapping:</p>
<p style="text-align: center;">\(f \left( x \right) = x\)</p>
<p>Namely, the output value – that is \(f \left( x \right)\) &#8211; is identical to the input value, which is \(x\).<br />
This mask is called <strong>Highlights Luminosity Mask</strong>. Why? Because low input values (Shadows) are mapped to low output values (Dark pixels), and high input values (Highlights) are mapped to high output values (Light pixes). The result is a mask where shadows are dark (not selected) and highlights are light (selected) – hence the name.</p>
<p>Another basic mask is given by the negative (inverse) of the Highlights Mask which is the <strong>Shadows Luminosity Mask</strong>:</p>
<p style="text-align: center;">\(f \left( x \right) = 255 &#8211; x\)</p>
<p>Here, to low input values (shadows) correspond high output values, and to high input values correspond high output values (light pixes). The result is a mask where shadows are light (selected) and highlights are dark (not selected).</p>
<p>Using those 2 building blocks one could generate many other masks targeting different Tonal Ranges – something we will get to later.</p>
<p><img class="aligncenter size-large wp-image-3285" src="http://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskShowCaseAnimated-700x266.png" alt="" width="610" height="232" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskShowCaseAnimated-700x266.png 700w, https://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskShowCaseAnimated-150x57.png 150w, https://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskShowCaseAnimated-300x114.png 300w, https://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskShowCaseAnimated.png 1000w" sizes="(max-width: 610px) 100vw, 610px" /></p>
<p>As can be seen above, the Midtones Mask is generated by scaled multiplication of the Highlights Mask and the Shadows Mask. This is one way to achieve this, not necessarily what&#8217;s used usually (we&#8217;ll talk about that). Moreover, as can be seen by the Harmonic Function, one could do any mapping one wish.</p>
<p><strong>Remark:</strong> in practice, data is scaled into [0, 1] range as operations, such as multiplication, makes more sense in that domain. So the range {0, 1, 2, &#8230;, 254, 255} becomes {0 / 255, 1 / 255, 2 /255, &#8230;, 254 / 255, 255 / 255}. This is exactly what&#8217;s done in the above figure.</p>
<h2>In Practice</h2>
<p>So now we know what a Luminosity Mask Generator is, and what it is doing. On the next step, let&#8217;s try to understand how this is done in Photoshop in most cases.</p>
<p>As discussed above, one need to create a LUT and there are two main approaches doing so: the <strong>Calculations Tool</strong> or the <strong>Curve Tool</strong>.<br />
One can apply each of those on Grayscale Image and the output is basically a Luminosity Mask.</p>
<h3>Curve Tool</h3>
<p>The <a href="https://helpx.adobe.com/photoshop/using/curves-adjustment.html">Curve Tool</a> is a LUT table visualized by a Curve. It practically lets the user draw the LUT using a <em>flexible curve</em>.</p>
<p><img class="aligncenter size-full wp-image-3291" src="http://www.davidebarranca.com/wp-content/uploads/2018/03/PhotoshopCurveTool.png" alt="" width="286" height="304" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/03/PhotoshopCurveTool.png 286w, https://www.davidebarranca.com/wp-content/uploads/2018/03/PhotoshopCurveTool-150x159.png 150w, https://www.davidebarranca.com/wp-content/uploads/2018/03/PhotoshopCurveTool-282x300.png 282w" sizes="(max-width: 286px) 100vw, 286px" /></p>
<p>On the figure above, one could see Photoshop&#8217;s Curve tool. On its bottom, horizontally, you can see the input values. On the left, vertically, you can see the output value. You match between each value just by altering the curve according to your wish. Basically, school days function, that&#8217;s what it is, drawing a function.</p>
<p><strong>Luminosity Mask Recipe by Curve Tool</strong></p>
<ol>
<li>Create a Grayscale version of the image in a new layer (<a href="https://photoshoptrainingchannel.com/tips/loading-luminosity-keyboard-shortcut/">Extract Luminosity</a> / select one of the channels / desaturate the image / use Channel Mixer, etc&#8230;).</li>
<li>Open the Curve Tool.</li>
<li>Draw the desired LUT.</li>
<li>Use the result as a mask -&gt; Luminosity Mask.</li>
</ol>
<h3>Calculations Tool</h3>
<p>Using <a href="https://helpx.adobe.com/photoshop/using/channel-calculations.html">Calculations Tool</a> one could apply simple Math operations on Layer / Channel / etc&#8230; Namely we can combine Math operations (Add, Subtract, Multiply and even more esoteric functions) by repetitive use of the Calculation tool.</p>
<p>For instance, using the Calculation Tool we could easily generate the Midtones Mask from above by multiplying a layer and its inverse and scaling result by 4. So it gives us the option to use <code>+</code>, <code>–</code>, <code>*</code>, <code>/</code> on images, but not much more than that.</p>
<h3>Comparison &#8211; Curve Tool vs. Calculations Tool</h3>
<p>Let&#8217;s summarize the differences between those 2 approaches:</p>
<table>
<thead>
<tr>
<th></th>
<th>Curve Tool</th>
<th>Calculation Tool</th>
</tr>
</thead>
<tbody>
<tr>
<td>Advantages</td>
<td>&#8211; No limits what so ever on the shape of the selection.<br />
&#8211; Complex mask can be achieved in operation.</td>
<td>&#8211; Can be translated into exact Mathematical expression.<br />
&#8211; Smooth result and gets better as the mode (8, 16, 32 Bit) get higher.</td>
</tr>
<tr>
<td>Disadvantages</td>
<td>&#8211; Photoshop Curves are quantized into 256 levels which makes them less smooth.<br />
&#8211; No parameterization (Unless scripted) hence hard to be accurate and consistent.</td>
<td>&#8211; Limited to what can be done using the Blend Mode operations on the base Grayscale image.<br />
&#8211; Requires repetitive operations to get special selections (Slow).</td>
</tr>
<tr>
<td>Remarks</td>
<td>Used by many Luminosity Mask panels out there, yet unless result can be achieved using Calculations, quality wise it is better use Calculations.</td>
<td>Usually used for its quality yet limited either by speed or can get arbitrary selection.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2>Building Masks</h2>
<p>In this part we will show how most of the masks out there are built using the Lego bricks we created.</p>
<p><img class="aligncenter size-large wp-image-3292" src="http://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskRecipesAnimated-700x266.png" alt="" width="610" height="232" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskRecipesAnimated-700x266.png 700w, https://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskRecipesAnimated-150x57.png 150w, https://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskRecipesAnimated-300x114.png 300w, https://www.davidebarranca.com/wp-content/uploads/2018/03/LuminosityMaskRecipesAnimated.png 1000w" sizes="(max-width: 610px) 100vw, 610px" /></p>
<p>As one could see above, using Addition, Subtraction and Multiplication (Intersection), all operations available on Layers / Channels / Masks in Photoshop, one could easily generate all those &#8220;Classic&#8221; Luminosity Masks one could find in the wild (wild world of the Luminosity Masks Panels).</p>
<p>Those with <em>sharp eye</em> would pay attention to something strange: Midtones Mask 001 is all black, see the function below:</p>
<p style="text-align: center;">\(f \left( x \right) = 1 &#8211; x &#8211; ( 1 &#8211; x ) = 1 &#8211; 1 + x &#8211; x = 0\)</p>
<p>Yet in practice, in all products out there&#8230; It is not?! So what&#8217;s going on?  Clearly they all state that the Midtones Mask is created by subtracting the Highlights and Shadows masks from the all white mask. So it is, by all means, should be all black mask while it is not.</p>
<p>Well, what you see above is ideal Masks, while <strong>Photoshop can not generate them in this quality</strong>.  The current methods to create them usually use Photoshop&#8217;s steps which aren&#8217;t doing this exact Math.</p>
<p>We&#8217;ll talk more on those pitfalls and strange behavior of classic Luminosity Masks (and their generation) in the next writing.</p>
<h2>Summary</h2>
<ul>
<li>Now we&#8217;ve understood what Luminosity Masks really are, the actual operations and Math behind them.</li>
<li>We have shown the Luminosity Mask generation is no more than the most simple operation on grayscale image &#8211; Apply LUT / Pixel Wise Mapping.</li>
<li>What we saw is that there 2 main approaches for Luminosity Masks in Photoshop. While one gives the most flexibility and efficiency (Curve Tool) it lacks with quality and the other which generates smooth masks (Calculation Tool) has speed issues when trying to generate complex masks and some miss calculations in the process.</li>
</ul>
<p>How can we solve those? Well, do the algorithm outside the limitations of Photoshop. This is what <a href="https://cc-extensions.com//products/zoneselector/">Fixel Zone Selector</a> is all about. In the next part we&#8217;ll have a deeper dive and talk about Zone Selector&#8217;s approach to Luminosity Masks.</p>
<h4>Image Credit</h4>
<p><a href="https://www.flickr.com/photos/magnetismus/8399258607/">Lighthouse Image</a> &#8211; Credit to <a href="https://www.flickr.com/people/magnetismus/">magnetismus</a>.<br />
<a href="https://www.freeimages.com/photo/schwaigsee-lake-1342788">Schwaigsee Lake</a> &#8211; Credit to <a href="https://www.freeimages.com/photographer/Alfi007-51075">Alfred Borchard</a>.<br />
<a href="https://www.flickr.com/photos/lightsamples/22552453147">Simple Living</a> &#8211; Credit to <a href="https://www.flickr.com/photos/lightsamples">Malcolm Carlaw</a>.</p>
<h4>Resources</h4>
<p><a href="http://fotographee.com/tutorial-image-editing-luminosity-masks/">Luminosity Mask: The Complete Kickstarter’s Guide</a>.<br />
Video &#8211; <a href="https://www.youtube.com/watch?v=xvjno4d8uJ8">How to Generate the Classic Luminosity Masks Using Mask / Channel Operations (Add, Subtract, Intersect Multiply)</a>.<br />
Video &#8211; <a href="https://www.youtube.com/watch?v=43JbFIOckrM">How to Generate the Classic Luminosity Masks Using Calculations (16 Bit Mode)</a>.<br />
Video &#8211; <a href="https://www.youtube.com/watch?v=la-zWPwjuQw">Selecting Using Luminosity Masks (Using Curve Tool)</a>.</p>
<p><strong>Author of this guest post</strong>: <a href="https://cc-extensions.com/">Scott Murdock</a>.</div>
]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2018/03/luminosity-masks-how-does-it-really-work/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
							</item>
		<item>
		<title>A New Course on Adobe CEP Panels: Native Installers and Automation!</title>
		<link>https://www.davidebarranca.com/2018/01/ultimate-guide-native-installers-automated-build-system/</link>
				<comments>https://www.davidebarranca.com/2018/01/ultimate-guide-native-installers-automated-build-system/#comments</comments>
				<pubDate>Tue, 23 Jan 2018 13:37:47 +0000</pubDate>
		<dc:creator><![CDATA[Davide Barranca]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[HTML Panels]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[CEP]]></category>
		<category><![CDATA[course]]></category>
		<category><![CDATA[html panels]]></category>
		<category><![CDATA[Native Installer]]></category>

		<guid isPermaLink="false">http://www.davidebarranca.com/?p=3195</guid>
				<description><![CDATA[After Adobe Photoshop HTML Panels Development, I've now published a new Course, titled "The Ultimate Guide to Native Installers and Automated Build Systems"! 
For which title the gods of software development and copywriting will forgive me.

Curious?]]></description>
								<content:encoded><![CDATA[<div class="pf-content">After <a href="http://htmlpanelsbook.com/" target="_blank" rel="noopener">Adobe Photoshop HTML Panels Development</a>, I&#8217;ve now published a new Course, titled &#8220;The Ultimate Guide to Native Installers and Automated Build Systems&#8221;!</p>
<p><img class="aligncenter size-full wp-image-3247" src="http://www.davidebarranca.com/wp-content/uploads/2018/01/Book_Cover_Blog.jpg" alt="" width="600" height="513" srcset="https://www.davidebarranca.com/wp-content/uploads/2018/01/Book_Cover_Blog.jpg 1200w, https://www.davidebarranca.com/wp-content/uploads/2018/01/Book_Cover_Blog-150x128.jpg 150w, https://www.davidebarranca.com/wp-content/uploads/2018/01/Book_Cover_Blog-300x257.jpg 300w, https://www.davidebarranca.com/wp-content/uploads/2018/01/Book_Cover_Blog-700x599.jpg 700w" sizes="(max-width: 600px) 100vw, 600px" /></p>
<p>For which title the gods of software development and copywriting will forgive me.<br />
Curious?<span id="more-3195"></span></p>
<p>In the business of Adobe HTML Panels, sooner or later you&#8217;ll ask yourself: &#8220;how the heck do I do&#8230; <em>whatever it must be done</em> to let my customers run my software on their Computers?&#8221;<br />
The typical stream of consciousness is as follows.</p>
<p>I know I know: it&#8217;s just a matter of moving a folder to the right place, isn&#8217;t it? And perhaps few extra assets here and there&#8230; of course, I don&#8217;t want other developers to reverse engineer my own code, so it must be protected somehow. OK, I forgot signing and timestamping. And Code Certificates: should I buy one? Which one? Do they all work the same? I&#8217;ve heard that some classy people build Native Installers, like Apple and Windows programs with nice graphic interfaces, that defeat Gatekeeper and SmartScreen security warnings like a pro! Gee, do I have to go through all this, by hand, all the time? Each time I change my code, on each product? For real?</p>
<p>Stream of consciousness ends on a sad note.<br />
Hey, look at that! (Spring from Vivaldi&#8217;s The Four Seasons plays in background)</p>
<p><img class="aligncenter size-full wp-image-3218" src="http://www.davidebarranca.com/wp-content/uploads/2018/01/UG.gif" alt="" width="637" height="276" /></p>
<p>This is what the cool guys are doing. Type a command, and look at things that build themselves.</p>
<p>What is looping above is a sample project, including:</p>
<ul>
<li><strong>Input</strong>:
<ul>
<li>HTML Panel</li>
<li>Multiplatform Photoshop Plugin as <code>.plugin</code> and <code>.8bf</code> files (optional).</li>
<li>Readme documentation as a <code>.pdf</code> file (optional).</li>
</ul>
</li>
<li><strong>Output</strong>
<ul>
<li>Signed and Timestamped Panel folder with:
<ul>
<li><code>.js</code> files protected with advanced obfuscation algorithms.</li>
<li><code>.jsx</code> files exported as <code>.jsxbin</code> with different advanced obfuscation algorithms.</li>
</ul>
</li>
<li>Zipped version for convenience.</li>
<li>Hybrid Extension as a <code>.zxp</code> file, ready for submission on Adobe Add-ons.</li>
<li>Mac <code>.dmg</code> package, that in turn contains:
<ul>
<li>a <code>.pkg</code> native installer,</li>
<li>an uninstaller application,</li>
<li>the <code>.pdf</code> documentation.</li>
</ul>
</li>
<li>Windows <code>.exe</code> native installer that deploys Panel, Photoshop Plugin and Documentation
<ul>
<li>Uninstaller provided in Windows&#8217; Control Panel.</li>
</ul>
</li>
<li>Both platforms&#8217; native installers are signed with paid Code Certificates to comply with Windows and macOS security policies.</li>
</ul>
</li>
</ul>
<p>After many years of trial and errors, I&#8217;ve finally settled to the above setup for my own commercial products, which takes 20 seconds of computer work to automatically build all the above. The final result looks like that, first on Mac:</p>
<p><div style="width: 600px;" class="wp-video"><!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->
<video class="wp-video-shortcode" id="video-3195-1" width="600" height="400" poster="http://www.davidebarranca.com/wp-content/uploads/2018/01/Poster.jpg" preload="metadata" controls="controls"><source type="video/mp4" src="http://www.davidebarranca.com/wp-content/uploads/2018/01/UGMac.mp4?_=1" /><a href="http://www.davidebarranca.com/wp-content/uploads/2018/01/UGMac.mp4">http://www.davidebarranca.com/wp-content/uploads/2018/01/UGMac.mp4</a></video></div></p>
<p>Then on Windows:</p>
<p><div style="width: 600px;" class="wp-video"><video class="wp-video-shortcode" id="video-3195-2" width="600" height="400" preload="metadata" controls="controls"><source type="video/mp4" src="http://www.davidebarranca.com/wp-content/uploads/2018/01/Windows.mp4?_=2" /><a href="http://www.davidebarranca.com/wp-content/uploads/2018/01/Windows.mp4">http://www.davidebarranca.com/wp-content/uploads/2018/01/Windows.mp4</a></video></div></p>
<h2>The Course</h2>
<p>How to get there? I&#8217;ve explained it all, step by step, in <strong>The Ultimate Guide to Native Installers and Automated Build Systems</strong>, my new Course!</p>
<p><img class="aligncenter size-full wp-image-3242" src="http://www.davidebarranca.com/wp-content/uploads/2018/01/shot.jpg" alt="" width="600" height="513" /></p>
<p>It comes as a <strong>PDF ebook, bundled with the entire Sample Project code</strong> – both the dummy Panel and assets, plus the automation.</p>
<p>The course draws the <em>big picture</em> first, aka what needs to be done; then shows you how to manually perform each step, why, suggesting best practice and which software to use; finally, it teaches you how to write and customize the code to build the entire automation pipeline.</p>
<p><script src="https://gumroad.com/js/gumroad-embed.js"></script></p>
<div class="gumroad-product-embed" data-gumroad-product-id="swCoT" data-outbound-embed="true"><a href="https://gumroad.com/l/swCoT/">Loading&#8230;</a></div>
<p>&nbsp;</p>
<h3>FAQ</h3>
<p><strong>Does the Course apply to Photoshop only?<br />
</strong>I&#8217;ve used PS as my Adobe app of choice, but no, the course applies to <em>every</em> CEP-enabled app you&#8217;re developing extensions for.</p>
<p><strong>Mac, Windows or both?<br />
</strong>I&#8217;m on Mac: it&#8217;s the only platform that allows you to build both Mac <em>and</em> Windows installers; yet the automation code can run on Windows as well, with the exception of the Mac installers part.</p>
<p><strong>Does the bundle include Code Certificates?</strong><br />
No. On the one side, paid Code Certificates are strongly suggested but optional. On the other side, I could not buy them in your place! In fact, it took me quite some time and effort to acquire them just for myself.</p>
<p><strong>Does the Course cover Panels development?</strong><br />
This one is about installers and automation only. If you want the Big One (300 pages, 3 hours of videotutorials, 28 sample Panels code), head to the <a href="http://htmlpanelsbook.com/" target="_blank" rel="noopener">Adobe Photoshop HTML Panels Development</a> Course.</p>
<p><strong>Why there&#8217;s a 1 in the cover?</strong><br />
You have a sharp eye! I plan to expand the collection with more specific and smaller Courses like this one, in the future. Feel free to suggest topics you&#8217;d like to see covered in the comments! And yes, I have a <img src="https://s.w.org/images/core/emoji/11.2.0/72x72/1f98a.png" alt="🦊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> as the Terminal prompt, isn&#8217;t it cute?</p>
<h2>Thank you!</h2>
<p>Over the years, I&#8217;ve always posted articles on this blog as a way to give back to the developers&#8217; community what I&#8217;ve picked up myself in the first place – from Forums, chats, etc. Alas, we live in a (very) material and a (very) demanding world: projects like this one are fundamental for me to sustain my business and my family – and as a consequence maintain and update this blog too.<br />
Thank you in advance for your support! <img src="https://s.w.org/images/core/emoji/11.2.0/72x72/1f64f-1f3fb.png" alt="🙏🏻" class="wp-smiley" style="height: 1em; max-height: 1em;" />It is really appreciated.</p></div>
]]></content:encoded>
							<wfw:commentRss>https://www.davidebarranca.com/2018/01/ultimate-guide-native-installers-automated-build-system/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
				<enclosure url="http://www.davidebarranca.com/wp-content/uploads/2018/01/UGMac.mp4" length="0" type="video/mp4" />
<enclosure url="http://www.davidebarranca.com/wp-content/uploads/2018/01/Windows.mp4" length="0" type="video/mp4" />
			</item>
	</channel>
</rss>
