<?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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>India, Ink.</title>
	<atom:link href="http://ink.indiamos.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://ink.indiamos.com</link>
	<description>India blogs about making books. And, um, some other stuff.</description>
	<lastBuildDate>Tue, 01 May 2018 21:21:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.18</generator>
<site xmlns="com-wordpress:feed-additions:1">13469575</site>	<item>
		<title>A *solicited* opinion on cover letters</title>
		<link>https://ink.indiamos.com/2018/03/08/a-solicited-opinion-on-cover-letters/</link>
					<comments>https://ink.indiamos.com/2018/03/08/a-solicited-opinion-on-cover-letters/#respond</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Fri, 09 Mar 2018 03:24:04 +0000</pubDate>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=2241</guid>

					<description><![CDATA[(Cross-posted from Medium) A fellow alumna of my programming bootcamp DM’d me on Slack today to this effect: Hey, sorry to bother you, but I had a question, saw you were online, and highly value your opinion. I just got my first referral (yay!), but I don’t know if I should send a cover letter&#8230; <a class="more-link" href="https://ink.indiamos.com/2018/03/08/a-solicited-opinion-on-cover-letters/">Continue reading <span class="screen-reader-text">A *solicited* opinion on cover letters</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>(<a href="https://medium.com/@indiamos/a-solicited-opinion-on-cover-letters-185a9eda3fac">Cross-posted from Medium</a>)</p>
<p><figure id="attachment_2242" aria-describedby="caption-attachment-2242" style="width: 739px" class="wp-caption aligncenter"><img data-attachment-id="2242" data-permalink="https://ink.indiamos.com/2018/03/08/a-solicited-opinion-on-cover-letters/advice-2/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice.jpg?fit=2048%2C958&amp;ssl=1" data-orig-size="2048,958" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="advice" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice.jpg?fit=500%2C234&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice.jpg?fit=739%2C346&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice-1024x479.jpg?resize=739%2C346" alt="a table with two signs attached to the front: Bad Advice: 24 cents. Free Advice: 25 cents." width="739" height="346" class="size-large wp-image-2242" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice.jpg?resize=1024%2C479&amp;ssl=1 1024w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice.jpg?resize=500%2C234&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice.jpg?resize=768%2C359&amp;ssl=1 768w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice.jpg?resize=300%2C140&amp;ssl=1 300w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice.jpg?w=2048&amp;ssl=1 2048w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/advice.jpg?w=1478&amp;ssl=1 1478w" sizes="(max-width: 739px) 100vw, 739px" data-recalc-dims="1" /><figcaption id="caption-attachment-2242" class="wp-caption-text">photo: <a href="https://www.flickr.com/photos/rda/7903457170/">rda</a></figcaption></figure></p>
<p>A fellow alumna of my programming bootcamp DM’d me on Slack today to this effect:</p>
<blockquote>
<p>Hey, sorry to bother you, but I had a question, saw you were online, and highly value your opinion. I just got my first referral (yay!), but I don’t know if I should send a cover letter with my résumé. I’ve gotten mixed answers.</p>
</blockquote>
<p>Aw, gee, shucks. I am ever ready to give an <em>unsolicited</em> opinion, as friends and foes alike would probably attest, but it’s nice to be asked!</p>
<h2>My response</h2>
<p>In general, one should <em>always</em> include some kind of covering note. Even if I’m sending my résumé to someone so they can pass it over the transom, I include a version of what I <em>would</em> put in a cover letter,</p>
<ul>
<li>highlighting how the job matches my experience and interests,</li>
<li>pointing out anything relevant that might not be obvious from looking at my résumé, and</li>
<li>touching on why I’m interested in working at that company.</li>
</ul>
<p>Then if that person wants to, they can either forward the whole e-mail or cut and paste, per their discretion. The goal is to <strong><em>make it easy for them to refer you.</em></strong></p>
<p>And if you’re applying through an online form but then adding a referrer’s name, you should still include a cover letter, because you never know whose hands your application will actually end up in.</p>
<h2>Pro tip: Use your imagination</h2>
<p>Composing a cover letter <em>as if</em> you’re sending it to someone whom you know, for them to forward on, is a good way to avoid the zombielike tone that tends to make such letters awful both to write and to read.</p>
<p>Imagine someone who likes you, someone who wants you to succeed, someone who cares, and <strong><em>give them the information they need to pitch you to their boss.</em></strong></p>
<p>Because that’s essentially what’s happening. Everyone <em>wants</em> to be the person who <em>finds</em> the person who gets hired—even when there’s no referral bonus involved. They <em>want</em> to be able to fill that position. So they’ll be excited if they see a note that lets them believe that <em>you</em> might be that person.</p>
<p><figure id="attachment_2243" aria-describedby="caption-attachment-2243" style="width: 450px" class="wp-caption alignleft"><img data-attachment-id="2243" data-permalink="https://ink.indiamos.com/2018/03/08/a-solicited-opinion-on-cover-letters/whirled_peas/" data-orig-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/whirled_peas.jpg?fit=1095%2C640&amp;ssl=1" data-orig-size="1095,640" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;(c) Tim Ellis 2008&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="whirled peas" data-image-description="" data-medium-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/whirled_peas.jpg?fit=500%2C292&amp;ssl=1" data-large-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/whirled_peas.jpg?fit=739%2C432&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/whirled_peas-500x292.jpg?resize=500%2C292" alt="green peas arranged in a spiral" width="500" height="292" class="size-medium wp-image-2243" srcset="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/whirled_peas.jpg?resize=500%2C292&amp;ssl=1 500w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/whirled_peas.jpg?resize=768%2C449&amp;ssl=1 768w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/whirled_peas.jpg?resize=1024%2C599&amp;ssl=1 1024w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/whirled_peas.jpg?resize=300%2C175&amp;ssl=1 300w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2018/03/whirled_peas.jpg?w=1095&amp;ssl=1 1095w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /><figcaption id="caption-attachment-2243" class="wp-caption-text">visualize whirled peas • photo: <a href="https://www.flickr.com/photos/tim_ellis/2785641512/">Tim Ellis</a></figcaption></figure></p>
<p>Applying for jobs can make you feel worthless and like everybody’s slamming doors in your face all day, but in reality it’s not <em>all</em> antagonistic, behind those closed doors.</p>
<p>Even if you don’t know for sure who’s going to be reading your cover letter (and you did at least <em>try</em> to research this using teh Google, didn’t you?), it helps to <em>imagine</em> that you know them, so you can strike an appropriate tone of warmth, respect, and poise.</p>
<p>[<em>Intellectual property theft alert:</em> I expressed similar sentiments when I first discovered this correlation between readable cover letters and relative familiarity with the recipient, nearly a decade ago. If you wish to read that crankier batch of advice, which was issued from the perspective of a hiring manager who had no HR department to screen candidates, see the post <a href="/2008/08/08/job-application-tips/">Job application tips</a> on my non-Medium (Maximum?) blog.]</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2018/03/08/a-solicited-opinion-on-cover-letters/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2241</post-id>	</item>
		<item>
		<title>Communica&#173;tion is key: Giving the hard sell on “soft skills”</title>
		<link>https://ink.indiamos.com/2017/08/01/communication-is-key-giving-the-hard-sell-on-soft-skills/</link>
					<comments>https://ink.indiamos.com/2017/08/01/communication-is-key-giving-the-hard-sell-on-soft-skills/#comments</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Wed, 02 Aug 2017 03:45:07 +0000</pubDate>
				<category><![CDATA[CodeNewbie]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=2202</guid>

					<description><![CDATA[(Cross-posted from Medium.) Today at school we got an hourlong presentation on using LinkedIn effectively, which ended with a summary slide of statements we were to evaluate as true or false. One of these was “You should add soft skills to your skills,” and the “correct” answer seemed to be, more or less, false. My&#8230; <a class="more-link" href="https://ink.indiamos.com/2017/08/01/communication-is-key-giving-the-hard-sell-on-soft-skills/">Continue reading <span class="screen-reader-text">Communica&#173;tion is key: Giving the hard sell on “soft skills”</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>(<a href="https://medium.com/@indiamos/communication-is-key-90e2a8204d45">Cross-posted from Medium.</a>)</p>
<p><a href="https://www.flickr.com/photos/internetarchivebookimages/14569606499/"><img data-attachment-id="2203" data-permalink="https://ink.indiamos.com/2017/08/01/communication-is-key-giving-the-hard-sell-on-soft-skills/14569606499_b591f0e9bd_h/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h.jpg?fit=1600%2C1134&amp;ssl=1" data-orig-size="1600,1134" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Image from page 458 of “The Bell System technical journal” (1922)" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h.jpg?fit=500%2C354&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h.jpg?fit=739%2C524&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h-1024x726.jpg?resize=739%2C524" alt="A row of women seated in front of what appears to be an enormous telephone switchboard" width="739" height="524" class="aligncenter size-large wp-image-2203" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h.jpg?resize=1024%2C726&amp;ssl=1 1024w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h.jpg?resize=500%2C354&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h.jpg?resize=768%2C544&amp;ssl=1 768w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h.jpg?resize=300%2C213&amp;ssl=1 300w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h.jpg?w=1600&amp;ssl=1 1600w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/08/14569606499_b591f0e9bd_h.jpg?w=1478&amp;ssl=1 1478w" sizes="(max-width: 739px) 100vw, 739px" data-recalc-dims="1" /></a></p>
<p>Today at school we got an hourlong presentation on using LinkedIn effectively, which ended with a summary slide of statements we were to evaluate as <em>true</em> or <em>false</em>. One of these was “You should add soft skills to your skills,” and the “correct” answer seemed to be, more or less, <em>false</em>. My hand shot up, and I said that <em>well, actually</em>, soft skills are extremely important in tech, as they are everywhere, and that if you’re an excellent programmer who can’t communicate with other people, nobody with any sense is going to want you on their team.</p>
<p><span id="more-2202"></span></p>
<p>Later, I elaborated via Slack to one of the school administrators as follows:</p>
<blockquote>
<p>…one of the few advantages that bootcamp graduates have over recent CS graduates is that they do, on average, tend to have more real-life experience working on teams, managing, being managed, and working with other humans in general. And chronic undervaluing of soft skills is <em>specifically</em> part of why the tech industry is a notorious trash fire, not just for women and people of color, but for everyone (encouragement of burnout, lousy work/life balance, etc.). So to have a career services person tell the entire student body to deemphasize soft skills in our LinkedIn profiles and similar places seems counterproductive.</p>
<p>This is literally why we can’t have nice things.</p>
<p>A more helpful approach would be to explain how to use this experience to one’s advantage, in statements of interest, cover letters, and interviews.</p>
</blockquote>
<p>Several hours later, I’m still mildly exercised about this. So I sifted through my bookmarks for a couple of favorite discussions of the communication issue, to share with my classmates. It ended up being too much to dump into Slack, and we’re supposed to be blogging regularly about tech-related things, because <em>personal branding</em>, so I’m throwing them here.</p>
<p>This post is <em>so totally</em> on brand for me.</p>
<h3>1. Andrea Goulet: “Communication Is Just As Important As&nbsp;Code”</h3>
<ul>
<li>Video: <a href="https://vimeo.com/177846366">https://vimeo.com/177846366</a>
      </li>
<li>Slides + approximate transcript: <a href="http://corgibytes.com/blog/2016/06/06/communication-and-code/">http://corgibytes.com/blog/2016/06/06/communication-and-code/</a>
      </li>
</ul>
<p><strong>Excerpt:</strong></p>
<blockquote>
<p>…getting better at your communication is the best way to level up your career.</p>
<p>If you want be a Lead Dev, a CTO, or own your own business, communicating effectively with people who don’t code every day is a big part of your job.</p>
<p>If you want people to contribute to your open source project, communication is what makes them feel welcome and keeps them around.</p>
<p>And if you want other people to use your ideas, you need to learn how to blog, speak, and maybe even write books. All of that is communication.</p>
</blockquote>
<h3>&#9754; Sidebar: “Soft skills” as feminine, and therefore utterly worthless, duh</h3>
<p>The cultural tendency to identify soft skills with “women’s work,” which is <em>obviously</em> not worth paying real cash money for, is a whole other infuriating aspect of this topic, which I could spend all night posting links about, assuming I didn’t suffer a rage-blackout within the first half-hour. Instead, I will just mention this oldie but goodie: <a href="http://www.laurenbacon.com/women-tech-empathy-work/">Lauren Bacon: “Women in Tech and Empathy Work.”</a></p>
<h3>2. Sam Phippen: “On the unreasonable reality of ‘junior’ developer interviews”</h3>
<p><a href="https://medium.com/@samphippen/on-the-unreasonable-reality-of-junior-developer-interviews-946498c0ad57">https://medium.com/@samphippen/on-the-unreasonable-reality-of-junior-developer-interviews-946498c0ad57</a></p>
<p><strong>Excerpt:</strong></p>
<blockquote>
<p>Communication is the most important thing we do as developers. <strong>All computer problems are people problems.</strong> [boldface in the original, but I would double-bold it if I could]</p>
</blockquote>
<h3>&#9754; Sidebar:&nbsp;!@#$% whiteboarding</h3>
<p>If you’ve heard me rant about whiteboarding tests, the literally impossible one described in Sam’s post is the kind of thing that sets me off. Yes, whiteboarding is a worthwhile <em>exercise</em> for us as students. Whiteboarding forces you to think through a problem differently, when you can’t rely on autocomplete or test your ideas as you go along. But a lot of places that use whiteboarding tests are just trying to cover up for not having any idea of (a) what jobs they’re <em>actually</em> hiring for, and (b) how to <em>actually</em> identify the right people for those jobs. I have <em>so many</em> other great links about how whiteboarding is trash as an interviewing technique; don’t get me started.</p>
<p>Well, <em>more</em> started.</p>
<h3>3. Sarah Mei’s Twitter thread on coding bootcamp grads versus CS&nbsp;grads</h3>
<p><a href="https://twitter.com/i/web/status/881958594094268416">https://twitter.com/i/web/status/881958594094268416</a></p>
<p><strong>Excerpt:</strong></p>
<blockquote>
<p>Code school grads…often already have communication skills from a previous career. They just need to adapt them to tech.</p>
<p>Because of these existing skills, while code school grads stay junior longer, they accelerate dramatically past their CS peers at mid-level.</p>
<p>Anything technical can be spot-learned with google &amp; wikipedia; communication skills are harder to teach, &amp; seem to take longer to learn.</p>
</blockquote>
<p>With most people, when I &#128420; their tweets, what I really mean is &#9733;, but with Sarah Mei, I actually mean &#128420;. She is so fab.</p>
<h3>&lt;/rant&gt;</h3>
<p>So, yeah, maybe you don’t want to list your <a href="https://itsyourturnblog.com/lets-stop-calling-them-soft-skills-9cc27ec09ecb">so-called soft skills</a> at the tippy top of a tech CV, but they are by no means <em>un</em>important, and over the long run, they may give you an advantage over developers who have had more formal training.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2017/08/01/communication-is-key-giving-the-hard-sell-on-soft-skills/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2202</post-id>	</item>
		<item>
		<title>Getting to know you…&#127926;</title>
		<link>https://ink.indiamos.com/2017/06/05/getting-to-know-you/</link>
					<comments>https://ink.indiamos.com/2017/06/05/getting-to-know-you/#respond</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Mon, 05 Jun 2017 11:39:58 +0000</pubDate>
				<category><![CDATA[CodeNewbie]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web development]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=2179</guid>

					<description><![CDATA[(Cross-posted from Medium.) Nice dress, Julie. Tomorrow is my first day in the immersive curriculum of the Grace Hopper Academy full-stack JavaScript “bootcamp,” (as opposed to the part-time, remote portion, which has been going on since April), and we’ve been asked to write a blog post introducing ourselves to our classmates and anyone else who&#8230; <a class="more-link" href="https://ink.indiamos.com/2017/06/05/getting-to-know-you/">Continue reading <span class="screen-reader-text">Getting to know you…&#127926;</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>(<a href="https://medium.com/@indiamos/getting-to-know-you-5d720aa08193">Cross-posted from Medium.</a>)</p>
<p><div class="jetpack-video-wrapper"><iframe class='youtube-player' width='739' height='416' src='https://www.youtube.com/embed/4MNANgFCYpk?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent' allowfullscreen='true' style='border:0;' sandbox='allow-scripts allow-same-origin allow-popups allow-presentation'></iframe></div>
</p>
<p><small><em>Nice dress, Julie.</em></small></p>
<p>Tomorrow is my first day in the immersive curriculum of the <a href="https://www.gracehopper.com/">Grace Hopper Academy</a> full-stack JavaScript “bootcamp,” (as opposed to the part-time, remote portion, which has been going on since April), and we’ve been asked to write a blog post introducing ourselves to our classmates and anyone else who happens to stumble in.<br />
<span id="more-2179"></span></p>
<p>(<em>Note:</em> I already have a bunch of rusty old blogs, most notably <a href="http://ink.indiamos.com/">India, Ink.</a>, which is mostly about my work in and around book publishing, and <a href="http://itp.indiamos.com/blog/">ITPindia</a>, which is a classwork blog from my ill-fated 2008–2010 stint in grad school. There’s also <a href="https://drawmo.wordpress.com/">DrawMo!</a>, a group blog I created to manage a daily drawing challenge that happened a couple of years in a row.)</p>
<p>The questions we’ve been asked to answer in our first post are as follows:</p>
<h3>Why are you attending Fullstack Academy?</h3>
<p>There are two forks to this question: <strong>Why are you attending <em>a</em> programming bootcamp?</strong> and <strong>Why are you attending <em>this</em> one?</strong> I’m something of a completionist, so I’ll address both.</p>
<h4>a</h4>
<p>One of the things I most wanted to learn when I applied to my graduate program was computer programming, and that was certainly what all the most fun stuff I did there was about. Back when I attended, though, <a href="https://tisch.nyu.edu/itp" data-href="https://tisch.nyu.edu/itp">ITP</a> was teaching the version of <a href="https://processing.org/">Processing</a> that was based on Java, and between hating Java and hating ITP, by the time I left there, I pretty much never wanted to see that language again; accordingly, I can no longer really understand <em>any</em> of the code I posted on my old <a href="http://itp.indiamos.com/blog/">classwork blog</a>. Being able to rewrite that stuff in JS is an eventual goal.</p>
<p>I didn’t touch programming again for several years. In the meantime, though, all these <em>bootcamps</em> had started popping up. Flatiron School was the first one I heard about, and I thought it sounded really interesting, but even if I had been convinced of its quality and efficacy back then, I was so completely beyond broke from the combined financial devastation of attending grad school full-time for two years plus the concurrent recession that there was no way I could even <em>think</em> about trying it.</p>
<p>I ended up going back to working in book publishing, which I’d been doing for most of the previous decade, because that’s where most of my connections and experience were. The big difference was that the Kindle and iPad had blown up while I was in school, so I returned as an e-book developer rather than as a book designer or production manager. I didn’t know much about it, but neither did anybody else. We made it up as we went along, much as we’d done on websites a decade earlier.</p>
<p>Then in 2015, I got hired to handle the e-book library at <a href="http://www.amplify.com/">Amplify</a>, an educational technology company, and I had my first experience working with modern software teams. I’d collaborated with individual programmers before, and with a couple of small firms, but never at a place that had multiple groups working on different chunks of a big product. I liked learning how such projects were managed, and getting to participate in structured QA and problem-solving. Jira tickets! Whee!</p>
<p>I talked with some of my colleagues on the content production team about starting up a JavaScript study group, as I’d been meaning to learn how to use that for a long time, and it seemed like time. It turned out more of them wanted to solidify their HTML and CSS skills, so I started compiling notes on how to help with that. And then…</p>
<p>We all got laid off. <em>And so it goes.</em></p>
<p>I knew I didn’t want to go back into publishing, but my coding skillset was too narrow and weird (<em>ask me about HTML and CSS support in e-readers!</em>) for me to get hired at another tech company.</p>
<p><em>What a perfect time to sign up for a coding bootcamp!</em></p>
<p>I started attending more tech meetups, and listening to the super-excellent <a href="http://www.codenewbie.org/podcast">CodeNewbie podcast</a>, and I tried out <a href="https://www.freecodecamp.com/">Free Code Camp</a>, and I started learning JavaScript on my own. It was around that time that I heard about the Grace Hopper Academy, which had just started up, and I thought it sounded <em>awesome</em>.</p>
<p>But I was also kiiiiind of looking for work, as one does when one has no income, when a six-month temp job on a small, agile Web team fell in my way. I thought it’d be a great place to park myself while I learned a bit more about the agile development process, continued studying JS, and prepared to apply to an immersive program. I thought the six-month contract would be ideal, as then I’d have a <em>deadline</em> for getting my shit together.</p>
<p>More than thirteen months later—this past Friday—I finally said goodbye to my lovely colleagues at <a href="https://www.moma.org/">MoMA.org</a>, and <em>here we are</em>. So much for deadlines.</p>
<h4><code><code>this</code></code></h4>
<p>The key things that attracted me to the Grace Hopper Academy were as follows:</p>
<h5>All-women cohort.</h5>
<p>I didn’t understand the appeal of all-women schools when I was applying to undergrad programs, but in my tech-oriented graduate program the idea started to appeal, as there was definitely some gendered bullshit going on. It’s hard enough learning to program/upending your entire life <em>without</em> having those kinds of interactions, y’know? I’d just rather not waste bandwidth on that when I can avoid it, thanks.</p>
<p>Meanwhile, I’ve had consistently fantastic experiences with women-in-tech groups and events, such as <a href="http://www.writespeakcode.com/">Write/Speak/Code</a>, so when this program started up, it immediately became my top choice.</p>
<h5>Some coverage of actual computer science.</h5>
<p>I don’t do well with magical incantations. If I’m going to <em>do</em> something, I tend to do it better if I have some idea of what’s actually going on. One of the things I found most frustrating about learning Processing is how it attempted to hide the gnarly Java stuff behind a (<em>relatively</em>) friendly library and IDE. This meant that if you wanted to do anything <em>not</em> graphics-focused, you basically had to learn Java all over again, from scratch.</p>
<p>I was an English major in college; I’m much more interested in crunching text than in making bouncy graphics. I managed to stumble through Allison Parrish’s <a href="http://itp.indiamos.com/blog/category/a2z/">Programming A to Z</a> class in Java, but I’m pretty sure it was <em>harder</em> for me to learn that coming from friendly, cuddly Processing than it would have been had we started with some thorny abstractions. And as I’ve mentioned, I retained almost none of what I “learned,” in the long term. So, bring on the thorns, please.</p>
<p>It takes time and effort to learn the <em>why</em>s as well as the <em>how</em>s, but I am convinced that over time, this will make it easier and faster to become <em>good</em> at what I do.</p>
<h5>JavaScript-based curriculum.</h5>
<p>I have learned a little bit of a lot of programming languages over the last twenty years, so I waffled intensely over the question of which <em>one</em> language to properly learn <em>first.</em> But ultimately it comes down to this: a lot of people sniff at JavaScript—I heard the standard string of complaints just the other day, from one of the supernice developers at MoMA—but if you’re going to do stuff on the Web, you <em>have</em> to know your way around JavaScript. So I might as well <em>start</em> there.</p>
<h5>Back-loaded tuition.</h5>
<p>I’ve worked at nonprofits and in book publishing for most of my so-called career; I don’t happen to have ten to twenty grand stuffed in my mattress. (For anyone who’s wondering: nonprofits tend to pay better.) What I <em>do</em> have is student loans that I might be paying off until I die. There are certainly other ways to work around this problem, but not paying tuition until you actually have a job is one of the most practicable ones I’ve found.</p>
<h5>Solid support for career change and advancement.</h5>
<p>I’ve already successfully shifted careers a couple of times, and I think I’ve done reasonably well at getting hired and getting promoted, but I’ll still take all the help I can get.</p>
<h3>Is this a career change? If so, why?</h3>
<p>Yes, and no.</p>
<p>I started learning Web development in 1996, pretty much the same time I first saw the Web itself. (Yes, I’m old enough that I still capitalize things like “Web.”) I was the webmaster of <a href="https://www.poets.org/">Poets.org</a>, back when that was a job title serious people had; it ran on MS IIS, MS SQL Server, ColdFusion, and some other closed-source stuff, and though I didn’t build it, I did handle the day-to-day maintenance, both back- and front-end. When I started hearing about the open-source software movement, I played around with rebuilding the site on the LAMP stack, but it was too many things for me to learn all at once from O’Reilly books, while on the job. Still, I <em>wanted</em> to.</p>
<p>Then September 11 happened, and I got laid off, and book publishing looked fun, so I went and did that for several years. I still approached things like a <em>coder</em>, though, and used a proper text editor, even when the coding was just cleaning up Quark XPress Tags or messing with WordPress templates. And because I had started learning typesetting and CSS around the same time, and I’d been having to do conversion of text from one format to another at <em>every</em> job, I was always thinking about (a) the separation of presentation from content, (b) how to refactor things, and (c) how to automate processes.</p>
<p>The next time I worked on a website was for an online magazine, and though my title was, somewhat ridiculously, “art director,” I found it easier to communicate with our developer by sending code snippets than by making mockups or describing what I wanted.</p>
<p>When I became a full time e-book developer, I spent literally all day in HTML, CSS, and XML files. I have <em>Feelings</em> about coding standards, CSS hygiene, version control, and documentation.</p>
<p>When I worked at Amplify, two teams’ standups happened literally right behind my chair, so I got a big dose of agile software development practices, whether I needed it or not.</p>
<p>And this is kind of what my last month at MoMA looked like:</p>
<p><figure id="attachment_2180" aria-describedby="caption-attachment-2180" style="width: 500px" class="wp-caption aligncenter"><a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights.jpeg"><img data-attachment-id="2180" data-permalink="https://ink.indiamos.com/2017/06/05/getting-to-know-you/moma_github_insights/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights.jpeg?fit=1600%2C694&amp;ssl=1" data-orig-size="1600,694" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="moma_github_insights" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights.jpeg?fit=500%2C217&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights.jpeg?fit=739%2C320&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights-500x217.jpeg?resize=500%2C217" alt="Screenshot of a GitHub commit history chart, showing me as the main contributor to a repo, with 110 commits between May 2 and June 2, 2017" width="500" height="217" class="size-medium wp-image-2180" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights.jpeg?resize=500%2C217&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights.jpeg?resize=768%2C333&amp;ssl=1 768w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights.jpeg?resize=1024%2C444&amp;ssl=1 1024w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights.jpeg?w=1600&amp;ssl=1 1600w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/07/moma_github_insights.jpeg?w=1478&amp;ssl=1 1478w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><figcaption id="caption-attachment-2180" class="wp-caption-text">Okay, so they were mostly just Markdown pages to get merged into Jekyll templates the devs built. But still, that’s a lot of git for a nondeveloper! (Hint: This is related to my bombing on the final Foundations checkpoint.)</figcaption></figure></p>
<p>Have I ever been what is generally meant by the term <em>software developer</em>? Absolutely not. But I feel like I have a bunch of the pieces; they just don’t fit together yet.</p>
<h3>What is your work history?</h3>
<p>I’ve rambled too much about this already, but the gist is:</p>
<ul>
<li>nonprofit arts administrator</li>
<li>webmaster at a nonprofit arts organization</li>
<li>production editor/managing editor (with bonus typesetting and design)</li>
<li>typesetter and book designer</li>
<li>book designer</li>
<li>art director at a nonprofit arts organization, mostly for the daily online magazine</li>
<li>e-book developer and QA person</li>
<li>managing editor again (but! including editing, designing, and typesetting, as well as producing e-books)</li>
<li>e-book developer again, but at a software company, with some ad-hoc product management thrown in</li>
<li>digital media producer for a nonprofit arts organization</li>
</ul>
<h3>What motivated you to learn to code?</h3>
<p>I’ve always been more of a craftsperson than anything else, and for many years my life has revolved around things that are crafted out of code, so it makes sense to learn how to build those things myself.</p>
<p><em>Tra la.</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2017/06/05/getting-to-know-you/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2179</post-id>	</item>
		<item>
		<title>Note to self: Keeping my new inkjet printer alive</title>
		<link>https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/</link>
					<comments>https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/#respond</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Mon, 02 Jan 2017 04:18:49 +0000</pubDate>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[printing]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=2120</guid>

					<description><![CDATA[Back in October, I company-ized myself into an LLC, and on the advice of my travel guru Gil Saunders, I got a credit card that will give me 30,000 airline mileage points if I spend $1,000 on it within the first 90 days. So then, hmmmmmmmmm, what can my business spend $1,000 on, to get&#8230; <a class="more-link" href="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/">Continue reading <span class="screen-reader-text">Note to self: Keeping my new inkjet printer alive</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>Back in October, I company-ized myself into an LLC, and on the advice of my travel guru <a href="https://www.instagram.com/gilnyc/">Gil Saunders</a>, I got a credit card that will give me 30,000 airline mileage points if I spend $1,000 on it within the first 90 days. So then, <em>hmmmmmmmmm</em>, what can my business spend $1,000 on, to get me half a trip to Paris?</p>
<p>Well, shifting my Adobe Creative Cloud subscription to annual and putting it on the card took care of more than half the challenge. :/</p>
<p>And then I replaced my inkjet printer, which—like every other inkjet I&#8217;ve ever owned—had died of infrequent use.</p>
<p>As anyone who&#8217;s owned an inkjet knows, if you don&#8217;t use it often enough, the heads dry up. Then you end up having to run the head-cleaning utility all the time, which wastes a lot of ink, and you have to replace the ink cartridges all the time, which wastes a lot more. And since printer ink is <a href="http://www.consumerreports.org/cro/magazine/2013/08/the-high-cost-of-wasted-printer-ink/index.htm#graphic">one of the most expensive liquids on the planet</a>, wasting it is baaaaad. Besides which, eventually those underused nozzles get permanently gummed up, and the machine stops working altogether.<br />
<span id="more-2120"></span><br />
My last printer, a Canon PIXMA MX870, had an okay run, limping along from March 2010 until mid-2016. But for the last year of its life, it was basically a monochrome device—with its one color not necessarily being black—and finally it started displaying an error message upon startup and refused to print anything at all.</p>
<p>So, Amperbang LLC replaced it with <a href="http://thewirecutter.com/reviews/best-all-in-one-printer/">Wirecutter&#8217;s recommended</a> (or, more accurately, <em>least loathed</em>) all-in-one color printer, which is the HP OfficeJet Pro 8720, and yesterday, as soon as I was done setting up this appliance, I started researching how to automate having it print a test page every few days, to keep the heads clean. It turns out this is not difficult to do, but in case you—or Future Me—want to do something similar, I&#8217;ll try to make the process even easier by summarizing what I&#8217;ve learned.</p>
<h2>Prerequisites</h2>
<ul>
<li>You’re on a Mac. I did this on a late-2013 MacBook Pro running Sierra (10.12.2).</li>
<li>You have a wifi-enabled or otherwise always connected printer, which either is always on or can be scheduled to power up (and down) at regular intervals.</li>
</ul>
<h3>1. Schedule the printer to turn on and off at certain times each day.</h3>
<p><em><strong>Totally optional.</strong> If you don&#8217;t want to bother with this or if your printer doesn&#8217;t have this feature, you can either leave it on all the time, or let the print job sit in your Mac&#8217;s queue until the next time you turn the printer on.</em></p>
<p>On the HP OfficeJet 8720, this vaguely documented process goes as follows:</p>
<p>a. On the printer control panel, swipe down from the top of the screen to open the Dashboard.</p>
<p><a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels.png"><img data-attachment-id="2143" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/home_screen_2labels/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels.png?fit=3079%2C1887&amp;ssl=1" data-orig-size="3079,1887" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Home screen of an HP Officejet Pro 8720, with the Environmental Settings button circled" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels.png?fit=500%2C306&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels.png?fit=739%2C453&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels-500x306.png?resize=500%2C306" alt="Home screen of an HP Officejet Pro 8720, with the Environmental Settings controls circled" width="500" height="306" class="aligncenter size-medium wp-image-2143" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels.png?resize=500%2C306&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels.png?resize=768%2C471&amp;ssl=1 768w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels.png?resize=1024%2C628&amp;ssl=1 1024w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels.png?w=1478&amp;ssl=1 1478w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/home_screen_2labels.png?w=2217&amp;ssl=1 2217w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>b. Scroll the menu bar all the way to the right, and tap the icon that looks like two leaves.</p>
<p>This is <em>not</em> the correct screen; do not be fooled:<br />
<a href="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1.png"><img data-attachment-id="2145" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/wrong_screen_labeled_menu-2/" data-orig-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1.png?fit=2986%2C1751&amp;ssl=1" data-orig-size="2986,1751" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="The WRONG place to set the printer&#8217;s on/off schedule, with labeled menu bar" data-image-description="" data-medium-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1.png?fit=500%2C293&amp;ssl=1" data-large-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1.png?fit=739%2C433&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1-500x293.png?resize=500%2C293" alt="A configuration screen of the HP Officejet Pro 8720" width="500" height="293" class="aligncenter size-medium wp-image-2145" srcset="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1.png?resize=500%2C293&amp;ssl=1 500w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1.png?resize=768%2C450&amp;ssl=1 768w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1.png?resize=1024%2C600&amp;ssl=1 1024w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1.png?w=1478&amp;ssl=1 1478w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/wrong_screen_labeled_menu-1.png?w=2217&amp;ssl=1 2217w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>c. Once you find the Environmental Settings screen, tap “Schedule On/Off.”</p>
<p><a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings.jpg"><img data-attachment-id="2121" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/environmental_settings/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings.jpg?fit=3066%2C1736&amp;ssl=1" data-orig-size="3066,1736" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Environmental Settings" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings.jpg?fit=500%2C283&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings.jpg?fit=739%2C419&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings-500x283.jpg?resize=500%2C283" alt="The Environmental Settings screen of an HP Officejet Pro 8720" width="500" height="283" class="aligncenter size-medium wp-image-2121" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings.jpg?resize=500%2C283&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings.jpg?resize=768%2C435&amp;ssl=1 768w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings.jpg?resize=1024%2C580&amp;ssl=1 1024w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings.jpg?w=1478&amp;ssl=1 1478w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/environmental_settings.jpg?w=2217&amp;ssl=1 2217w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>d. Follow the prompts to set the days and times at which you want the printer to turn off and on.</p>
<p>Setting the days of the week:<br />
<a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days.jpg"><img data-attachment-id="2126" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/on_days/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days.jpg?fit=3179%2C1867&amp;ssl=1" data-orig-size="3179,1867" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Days to turn the printer on" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days.jpg?fit=500%2C294&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days.jpg?fit=739%2C434&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days-500x294.jpg?resize=500%2C294" alt="Scheduling screen of an HP Officejet Pro 8720" width="500" height="294" class="aligncenter size-medium wp-image-2126" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days.jpg?resize=500%2C294&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days.jpg?resize=768%2C451&amp;ssl=1 768w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days.jpg?resize=1024%2C601&amp;ssl=1 1024w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days.jpg?w=1478&amp;ssl=1 1478w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_days.jpg?w=2217&amp;ssl=1 2217w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>Since I wanted to schedule my printer tests by day of the month rather than day of the week (which would be a lot easier), I set the printer to turn on and off every day. (And then I undid it, on which more later.)</p>
<p>Setting the time of day:<br />
<a href="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set.jpg"><img data-attachment-id="2127" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/on_set/" data-orig-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set.jpg?fit=3156%2C1832&amp;ssl=1" data-orig-size="3156,1832" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Time to turn the printer on" data-image-description="" data-medium-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set.jpg?fit=500%2C290&amp;ssl=1" data-large-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set.jpg?fit=739%2C429&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set-500x290.jpg?resize=500%2C290" alt="Scheduling screen of an HP Officejet Pro 8720" width="500" height="290" class="aligncenter size-medium wp-image-2127" srcset="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set.jpg?resize=500%2C290&amp;ssl=1 500w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set.jpg?resize=768%2C446&amp;ssl=1 768w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set.jpg?resize=1024%2C594&amp;ssl=1 1024w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set.jpg?w=1478&amp;ssl=1 1478w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_set.jpg?w=2217&amp;ssl=1 2217w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>At 7:00 a.m., <em>I</em> am still in bed, but the <em>cats</em> are probably awake, so the printer&#8217;s powering up and down might enrich their boring lives.</p>
<p>Confirming your settings:<br />
<a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary.jpg"><img data-attachment-id="2128" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/on_summary/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary.jpg?fit=3264%2C1895&amp;ssl=1" data-orig-size="3264,1895" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Confirmation screen for time to turn on the printer" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary.jpg?fit=500%2C290&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary.jpg?fit=739%2C429&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary-500x290.jpg?resize=500%2C290" alt="Scheduling screen of an HP Officejet Pro 8720" width="500" height="290" class="aligncenter size-medium wp-image-2128" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary.jpg?resize=500%2C290&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary.jpg?resize=768%2C446&amp;ssl=1 768w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary.jpg?resize=1024%2C595&amp;ssl=1 1024w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary.jpg?w=1478&amp;ssl=1 1478w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/on_summary.jpg?w=2217&amp;ssl=1 2217w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>“Every everyday,” forsooth.</p>
<p>You&#8217;ll need to set both on and off days and times, and to activate the schedule.<br />
<a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary.jpg"><img data-attachment-id="2129" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/schedule_summary/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary.jpg?fit=2977%2C1694&amp;ssl=1" data-orig-size="2977,1694" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Printer on/off schedule summary page" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary.jpg?fit=500%2C285&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary.jpg?fit=739%2C421&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary-500x285.jpg?resize=500%2C285" alt="Scheduling screen of an HP Officejet Pro 8720" width="500" height="285" class="aligncenter size-medium wp-image-2129" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary.jpg?resize=500%2C285&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary.jpg?resize=768%2C437&amp;ssl=1 768w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary.jpg?resize=1024%2C583&amp;ssl=1 1024w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary.jpg?w=1478&amp;ssl=1 1478w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/schedule_summary.jpg?w=2217&amp;ssl=1 2217w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<h3>2. Set up your Mac to turn on and off at the same times as the printer.</h3>
<p><em><strong>Optional.</strong> Per step 4 below, this is <strong>required</strong> if using cron, <strong>optional</strong> if you&#8217;re using launchd. You&#8217;re not <strong>required</strong> to use cron, though, so overall, it&#8217;s <strong>optional</strong>.</em></p>
<p>You can set this up using the Energy Saver preference pane.</p>
<p><a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled.png"><img data-attachment-id="2131" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/energy_saver_preference_pane_labeled/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled.png?fit=1560%2C1118&amp;ssl=1" data-orig-size="1560,1118" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Energy Saver preference pane" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled.png?fit=500%2C358&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled.png?fit=739%2C530&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled-500x358.png?resize=500%2C358" alt="The Energy saver preference pane, with the “Schedule” sheet displayed and filled out" width="500" height="358" class="aligncenter size-medium wp-image-2131" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled.png?resize=500%2C358&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled.png?resize=768%2C550&amp;ssl=1 768w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled.png?resize=1024%2C734&amp;ssl=1 1024w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled.png?w=1560&amp;ssl=1 1560w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_saver_preference_pane_labeled.png?w=1478&amp;ssl=1 1478w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p><a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18.png"><img data-attachment-id="2132" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/screenshot-2017-01-01-17-27-18/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18.png?fit=1560%2C1118&amp;ssl=1" data-orig-size="1560,1118" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Energy Saver preference pane schedule sheet" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18.png?fit=500%2C358&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18.png?fit=739%2C530&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18-500x358.png?resize=500%2C358" alt="The Energy saver preference pane, with the “Schedule” sheet displayed and filled out" width="500" height="358" class="aligncenter size-medium wp-image-2132" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18.png?resize=500%2C358&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18.png?resize=768%2C550&amp;ssl=1 768w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18.png?resize=1024%2C734&amp;ssl=1 1024w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18.png?w=1560&amp;ssl=1 1560w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Screenshot-2017-01-01-17.27.18.png?w=1478&amp;ssl=1 1478w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p><a href="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_Saver_date_options.png"><img data-attachment-id="2158" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/energy_saver_date_options/" data-orig-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_Saver_date_options.png?fit=324%2C468&amp;ssl=1" data-orig-size="324,468" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Energy Saver date options" data-image-description="" data-medium-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_Saver_date_options.png?fit=324%2C468&amp;ssl=1" data-large-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_Saver_date_options.png?fit=324%2C468&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/Energy_Saver_date_options.png?resize=324%2C468" alt="Energy Saver date options" width="324" height="468" class="aligncenter size-full wp-image-2158" data-recalc-dims="1" /></a></p>
<p>The timing options are not very granular, which is partly why I decided to ditch this method. If I wanted to run this task only once a week, these options would be fine. For a twice-weekly task, though, you end up having to set the schedule for every day.</p>
<h3>3. Create an Automator app that prints a document.</h3>
<p><em><strong>Required.</strong></em></p>
<p>I accomplished this using the instructions in this post by Clay Harmon:<br />
<a href="https://www.clayharmon.com/words/articles/exercising-your-printer-with-automator-and-crontab">Exercising Your Printer With Automator And Crontab</a>.</p>
<p>I set up my app to print this exciting PDF—<br />
<a href="http://cream.sourceforge.net/ColorCard.pdf">http://cream.sourceforge.net/ColorCard.pdf</a><br />
—but a Google image search for <a href="https://www.google.com/search?q=inkjet+printer+test+page&#038;tbm=isch">inkjet printer test page</a> will turn up lots of other options. You might want one that uses less ink, for instance.</p>
<p>Here are the Automator settings. I saved it to ~/Applications<a href="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/#footnote_0_2120" id="identifier_0_2120" class="footnote-link footnote-identifier-link" title="I hate when instructions assume you know things, so let me explicitly say that whenever you see a path beginning with ~/ in Mac-related instructions, this means the address is relative to your user folder. So, if my Mac login name is amperbang, ~/Applications would be in Macintosh HD &gt; Users &gt; amperbang &gt; Applications.">1</a> as PrintTestPage.app:</p>
<p><a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings.png"><img data-attachment-id="2133" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/printtestpage_automator_settings/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings.png?fit=2030%2C1532&amp;ssl=1" data-orig-size="2030,1532" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Automator settings" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings.png?fit=500%2C377&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings.png?fit=739%2C558&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings-500x377.png?resize=500%2C377" alt="Screenshot of the OS X Automator" width="500" height="377" class="aligncenter size-medium wp-image-2133" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings.png?resize=500%2C377&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings.png?resize=768%2C580&amp;ssl=1 768w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings.png?resize=1024%2C773&amp;ssl=1 1024w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings.png?w=2030&amp;ssl=1 2030w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/PrintTestPage_automator_settings.png?w=1478&amp;ssl=1 1478w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<h3>4. Schedule your app to run.</h3>
<p><em><strong>Required.</strong> But there are (at least) two ways to do this, and you can choose either one, depending on your desired schedule and how completely automated you want this chore to be.</em></p>
<h4>a. Cron</h4>
<p>Cron, as in c[h]ronological, is a venerable Unix utility that performs tasks on a schedule. It can perform those tasks only if your computer is awake; otherwise, nothing happens. But if your computer is <em>always</em> awake—e.g., if you&#8217;re running the test-page-printing app from a server—or if you don&#8217;t mind scheduling for it to wake and sleep at predetermined times, per step 2 above, it&#8217;s rat simple.</p>
<p>To create a cron job to run your test-page-printing app, follow <a href="https://www.clayharmon.com/words/articles/exercising-your-printer-with-automator-and-crontab">Clay Harmon’s step-by-step instructions</a>.</p>
<p>Here&#8217;s the command I set up:<br />
<a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/cron2.png"><img data-attachment-id="2151" data-permalink="https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/cron2/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/cron2.png?fit=1394%2C956&amp;ssl=1" data-orig-size="1394,956" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="My cron job" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/cron2.png?fit=500%2C343&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/cron2.png?fit=739%2C507&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/cron2-500x343.png?resize=500%2C343" alt="Screenshot of editing window showing a cron command" width="500" height="343" class="aligncenter size-medium wp-image-2151" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/cron2.png?resize=500%2C343&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/cron2.png?resize=768%2C527&amp;ssl=1 768w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/cron2.png?resize=1024%2C702&amp;ssl=1 1024w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2017/01/cron2.png?w=1394&amp;ssl=1 1394w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
(The top 9 lines are just to show you what each part of the command does; they&#8217;re cribbed from Calomel.org&#8217;s <a href="https://calomel.org/cron_at.html">Cron and At</a> post.)</p>
<p>This job will run my Automator app at 7:30 a.m. on the 1st, 5th, 10th, 15th, 20th, and 25th day of each month, <em>as long as my laptop is awake at that hour.</em></p>
<p>But then I thought that maybe I don&#8217;t want the printer and laptop turning on <em>every</em> day from 7 to 8 a.m., when I&#8217;m only going to print a test page every <em>fifth</em> day. Maybe I just want the job to run at <em>approximately</em> the same time on every fifth day, at whatever time I actually wake my laptop—which is nearly always going to be after 8 a.m. So…</p>
<h4>b. Launchd</h4>
<p>If you just want the task to happen <em>eventually</em>, whether your computer is awake at the prescribed time or not, a better solution—and the method <a href="https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/ScheduledJobs.html">Apple prefers</a> over cron—is to use the launchd framework, which was introduced with Mac OS X Tiger.</p>
<p>If a launchd agent is scheduled to start while your Mac is asleep, it just waits until the next time the computer is awake. And the task will run only once, even if more than one scheduled occurrence passed by while the computer was off or sleeping—so you won&#8217;t end up with a stack of test pages printing all in a row, if your computer&#8217;s been shut down for a month. (During which time your inkjet printer has diiiiiied…)</p>
<p>Setting up a launchd agent is slightly more complex than creating a cron job, but since this method lets you skip step 2 above, it&#8217;s probably a wash, effortwise.</p>
<p>There are apps that can help you create the necessary .plist file, such as <a href="https://www.peterborgapps.com/lingon/">Lingon X</a> ($10) and <a href="http://www.soma-zone.com/LaunchControl/">LaunchControl</a> ($10). The makers of LaunchControl also host the site <a href="http://www.launchd.info/">launchd.info</a>, which explains how to create and use artisanal launchd property lists, interlarded with pitches for letting their software handle everything for you.</p>
<p>If like me you don&#8217;t anticipate creating another launchd agent any time soon, and you aren&#8217;t $10 worth of lazy, you can probably just dive into the XML yourself. Here&#8217;s the file I created:</p>
<p><pre><code class="language-xml">
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
&lt;dict&gt;
  &lt;key&gt;EnvironmentVariables&lt;/key&gt;
  &lt;dict&gt;
    &lt;key&gt;PATH&lt;/key&gt;
    &lt;string&gt;/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/bin/bash:/usr/local/sbin&lt;/string&gt;
  &lt;/dict&gt;
  &lt;key&gt;Label&lt;/key&gt;
  &lt;string&gt;com.amperbang.printTestPage&lt;/string&gt;
  &lt;key&gt;ProgramArguments&lt;/key&gt;
  &lt;array&gt;
    &lt;string&gt;/Applications/PrintTestPage.app/Contents/MacOS/Application Stub&lt;/string&gt;
  &lt;/array&gt;
  &lt;key&gt;RunAtLoad&lt;/key&gt;
  &lt;false/&gt;
  &lt;key&gt;StartCalendarInterval&lt;/key&gt;
  &lt;array&gt;
    &lt;dict&gt;
      &lt;key&gt;Day&lt;/key&gt;
      &lt;integer&gt;1&lt;/integer&gt;
      &lt;key&gt;Hour&lt;/key&gt;
      &lt;integer&gt;7&lt;/integer&gt;
      &lt;key&gt;Minute&lt;/key&gt;
      &lt;integer&gt;30&lt;/integer&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
      &lt;key&gt;Day&lt;/key&gt;
      &lt;integer&gt;5&lt;/integer&gt;
      &lt;key&gt;Hour&lt;/key&gt;
      &lt;integer&gt;7&lt;/integer&gt;
      &lt;key&gt;Minute&lt;/key&gt;
      &lt;integer&gt;30&lt;/integer&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
      &lt;key&gt;Day&lt;/key&gt;
      &lt;integer&gt;10&lt;/integer&gt;
      &lt;key&gt;Hour&lt;/key&gt;
      &lt;integer&gt;7&lt;/integer&gt;
      &lt;key&gt;Minute&lt;/key&gt;
      &lt;integer&gt;30&lt;/integer&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
      &lt;key&gt;Day&lt;/key&gt;
      &lt;integer&gt;15&lt;/integer&gt;
      &lt;key&gt;Hour&lt;/key&gt;
      &lt;integer&gt;7&lt;/integer&gt;
      &lt;key&gt;Minute&lt;/key&gt;
      &lt;integer&gt;30&lt;/integer&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
      &lt;key&gt;Day&lt;/key&gt;
      &lt;integer&gt;20&lt;/integer&gt;
      &lt;key&gt;Hour&lt;/key&gt;
      &lt;integer&gt;7&lt;/integer&gt;
      &lt;key&gt;Minute&lt;/key&gt;
      &lt;integer&gt;30&lt;/integer&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
      &lt;key&gt;Day&lt;/key&gt;
      &lt;integer&gt;25&lt;/integer&gt;
      &lt;key&gt;Hour&lt;/key&gt;
      &lt;integer&gt;7&lt;/integer&gt;
      &lt;key&gt;Minute&lt;/key&gt;
      &lt;integer&gt;30&lt;/integer&gt;
    &lt;/dict&gt;
  &lt;/array&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</code></pre>
</p>
<p>This agent <em>hopes</em> to run my Automator app at 7:30 a.m. on the 1st, 5th, 10th, 15th, 20th, and 25th day of each month. If it can&#8217;t run it at 7:30—which it probably never will, because both I and my laptop are dead to the world at that hour—it does so when the laptop wakes, instead. If the printer doesn&#8217;t happen to also be awake at that time, the print queue app will squawk at me, which will remind me to turn the printer on.</p>
<p>I placed the .plist file in ~/Library/LaunchAgents/, and I ran the following terminal command to get it loaded the first time:</p>
<p><code>launchctl load ~/Library/LaunchAgents/com.amperbang.printTestPage.plist</code></p>
<p>That&#8217;s a one-time command, because I had just created this agent. From now on, as I understand matters, the agent should get loaded automatically every time I log in.</p>
<p>If I needed to unload the agent—for example, if I made a change to it and needed to restart it, I&#8217;d run</p>
<p><code>launchctl unload ~/Library/LaunchAgents/com.amperbang.printTestPage.plist</code></p>
<p>To actually <em>use</em> the agent a single time, off the schedule, I can run the terminal command</p>
<p><code>launchctl start com.amperbang.printTestPage</code></p>
<p>When I did this, the test page printed. Woo!</p>
<h3>Conclusion</h3>
<p>So, after all that research, I&#8217;ve ended up using just the Automator app and the launchd agent. No automatic waking and sleeping of printer and computer. It&#8217;ll just run when it runs.</p>
<p>Tune in five years from now to find out whether the printer&#8217;s still firing on all cylinders…</p>
<ol class="footnotes"><li id="footnote_0_2120" class="footnote">I hate when instructions assume you know things, so let me explicitly say that whenever you see a path beginning with <code>~/</code> in Mac-related instructions, this means the address is relative to your user folder. So, if my Mac login name is amperbang, ~/Applications would be in Macintosh HD > Users > amperbang > Applications.</li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2017/01/02/note-to-self-keeping-my-new-inkjet-printer-alive/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2120</post-id>	</item>
		<item>
		<title>Note to Self: Transcribing Podcasts</title>
		<link>https://ink.indiamos.com/2016/06/01/note-to-self-transcribing-podcasts/</link>
					<comments>https://ink.indiamos.com/2016/06/01/note-to-self-transcribing-podcasts/#comments</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Thu, 02 Jun 2016 00:58:04 +0000</pubDate>
				<category><![CDATA[CodeNewbie]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=2079</guid>

					<description><![CDATA[I&#8217;ve been listening to a lot of podcasts lately, and I wanted to try making transcripts of one series, because, well, podcasts are a terrible way to store any information that you actually want to retrieve. And then a friend on Twitter was lamenting about how the process of transcription sucks, and another Twitter friend&#8230; <a class="more-link" href="https://ink.indiamos.com/2016/06/01/note-to-self-transcribing-podcasts/">Continue reading <span class="screen-reader-text">Note to Self: Transcribing Podcasts</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>I&#8217;ve been listening to a lot of podcasts lately, and I wanted to try making transcripts of one series, because, well, podcasts are a terrible way to store any information that you actually want to retrieve. And then a friend on Twitter was lamenting about how the process of transcription sucks, and <a href="https://twitter.com/CaseyG">another Twitter friend</a> pointed out <a href="https://github.com/glitchdigital/video-transcriber">glitchdigital/video-transcriber</a>, and I decided to try it.<br />
<span id="more-2079"></span></p>
<h2>Installation</h2>
<p>Installation was a bit of a headache, though the “<a href="https://github.com/glitchdigital/video-transcriber">Getting Started</a>” instructions for video-transcriber were <em>mostly</em> pretty thorough:</p>
<ul>
<li>Register for an IBM Bluemix Account.</li>
<li>Install Node.js and FFMpeg, using <a href="http://brew.sh/">Homebrew</a>, which I already had installed for something else.</li>
<li>“Install Node.js dependences in the usual way,” an instruction which <a href="https://twitter.com/indiamos/status/729479054143959041">incensed me</a>. I think I figured out what “the usual way” was via StackOverflow, but I now see that Dave MacFarland of Treehouse has written a nicely detailed tutorial: <a href="http://blog.teamtreehouse.com/install-node-js-npm-mac">How to Install Node.js and NPM on a Mac</a>.</li>
</ul>
<p>Here are the Terminal commands that I used during installation (not including installing Homebrew):<br />
<code><br />
$ brew install node ffmpeg<br />
$ cd /Applications/video-transcriber-master<br />
$ npm install</code></p>
<h2>Transcribing</h2>
<p>Here is the command (all on one line) that I use every time I need to start the transcription server:<br />
<code><br />
$ WATSON_SPEECH_TO_TEXT_API_USERNAME="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" WATSON_SPEECH_TO_TEXT_API_PASSWORD="xxxxxxxxxxxx" npm start</code></p>
<p>The software turned out to have a bug in it—or maybe I installed it wrong?—that causes it to crash after it processes more than about 18 minutes of audio. But once I chopped my MP3s into &lt;18-minute chunks, it worked okay, and it&#8217;s kind of fun to watch.</p>
<p>I recorded a short video so you can see/hear the app in action. Note that it starts transcribing before the audio starts (around 0:38), runs a bit faster than the sound, and adjusts its transcription as new words are added.</p>
<p><div class="jetpack-video-wrapper"><div class="embed-vimeo" style="text-align: center;"><iframe src="https://player.vimeo.com/video/167842957" width="470" height="253" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div></div></p>
<p>A 16-minute clip takes about 8 minutes to transcribe.</p>
<h2>Editing</h2>
<p>You can’t edit the text  while the transcription is occurring. When it finishes, however, the tool switches into editing mode.</p>
<p>All the words it decided were suspect are highlighted in yellow, and you can click into the text to edit it. Most of the time when you click, the audio will start playing from around that location, so you can verify what was actually said.</p>
<p><a href="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37.png"><img data-attachment-id="2080" data-permalink="https://ink.indiamos.com/2016/06/01/note-to-self-transcribing-podcasts/screenshot-2016-05-24-02-15-37/" data-orig-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37.png?fit=1730%2C1394&amp;ssl=1" data-orig-size="1730,1394" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="video-transcriber editing mode" data-image-description="" data-medium-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37.png?fit=500%2C403&amp;ssl=1" data-large-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37.png?fit=739%2C595&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37-500x403.png?resize=500%2C403" alt="screenshot of video-transcriber showing highlighted suspect words" width="500" height="403" class="aligncenter size-medium wp-image-2080" srcset="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37.png?resize=500%2C403&amp;ssl=1 500w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37.png?resize=768%2C619&amp;ssl=1 768w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37.png?resize=1024%2C825&amp;ssl=1 1024w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37.png?w=1730&amp;ssl=1 1730w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2016/05/Screenshot-2016-05-24-02.15.37.png?w=1478&amp;ssl=1 1478w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>Once you&#8217;re done editing, you can click “Transcript reviewed,” which does…nothing. Except prevent you from editing the transcript any further? There’s no way to re-enter editing mode.</p>
<p>You can then select your transcribed text, copy, and paste into a real text editor. The timestamps do not get included on your clipboard, alas; <a href="https://github.com/glitchdigital/video-transcriber/issues/3">one</a> of the three issues filed on GitHub as of this writing is a request for an option to export <em>with</em> the timestamps.</p>
<p>This app is very <acronym title="minimum viable product">MVP</acronym>, and rather fragile. It crashed on clips longer than 18 minutes, and sometimes it just dies for no apparent reason, and you have to restart it from Terminal and refresh the page. If this happens, your previously transcribed text is not saved, so I quickly got into the habit of copying chunks of transcript out early and often, while I worked on it.</p>
<h2>Results</h2>
<p>Basically, it works, and it&#8217;s less tedious than typing it all out by hand, or starting and stopping some more typical MP3 player a million times while you make corrections.</p>
<p>The two Code Newbie transcripts I’ve created so far are on GitHub: <a href="https://github.com/indiamos/codenewbie-transcripts">https://github.com/indiamos/codenewbie-transcripts</a>. Each one took me perhaps twice as long to edit as the actual running time of the audio, but I expect to get faster at it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2016/06/01/note-to-self-transcribing-podcasts/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2079</post-id>	</item>
		<item>
		<title>Renumbering navpoints in BBEdit the not-so-hard way</title>
		<link>https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/</link>
					<comments>https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/#respond</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Thu, 05 Mar 2015 18:19:31 +0000</pubDate>
				<category><![CDATA[e-books]]></category>
		<category><![CDATA[eprdctn]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=1970</guid>

					<description><![CDATA[Because it’s been more than a week since I last opened myself up to scorn about my lack of scripting skillz, here’s a how-to for another semiautomated e-production task in BBEdit (or TextWrangler): renumbering navpoints in an NCX. So, let&#8217;s say you have an NCX to which you need to add another navpoint, or from&#8230; <a class="more-link" href="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/">Continue reading <span class="screen-reader-text">Renumbering navpoints in BBEdit the not-so-hard way</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><a href="https://www.flickr.com/photos/19779889@N00/6832796107"><img data-attachment-id="2000" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/6832796107_c96445a66a_o/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/6832796107_c96445a66a_o-e1425579470158.jpg?fit=2042%2C972&amp;ssl=1" data-orig-size="2042,972" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;32&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Canon EOS 7D&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;100&quot;,&quot;iso&quot;:&quot;320&quot;,&quot;shutter_speed&quot;:&quot;1&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="AddoMeter by arbyreed" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/6832796107_c96445a66a_o-e1425579470158.jpg?fit=500%2C238&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/6832796107_c96445a66a_o-e1425579470158.jpg?fit=739%2C351&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/6832796107_c96445a66a_o-e1425579470158-500x238.jpg?resize=500%2C238" alt="AddoMeter by arbyreed" width="500" height="238" class="aligncenter size-medium wp-image-2000" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/6832796107_c96445a66a_o-e1425579470158.jpg?resize=500%2C238&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/6832796107_c96445a66a_o-e1425579470158.jpg?resize=1024%2C487&amp;ssl=1 1024w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/6832796107_c96445a66a_o-e1425579470158.jpg?w=2042&amp;ssl=1 2042w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/6832796107_c96445a66a_o-e1425579470158.jpg?w=1478&amp;ssl=1 1478w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
Because it’s been more than a week since I last opened myself up to scorn about my lack of scripting skillz, here’s a how-to for another semiautomated e-production task in BBEdit (or TextWrangler): renumbering navpoints in an NCX.<br />
<span id="more-1970"></span></p>
<p>So, let&#8217;s say you have an NCX to which you need to add another navpoint, or from which you need to remove one. If the navMap has only four or five points, as in the screenshot below, renumbering by hand is no big deal.<br />
<a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.22.54.png"><img data-attachment-id="1972" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-12-22-54/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.22.54.png?fit=737%2C791&amp;ssl=1" data-orig-size="737,791" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Navpoints to be renumbered" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.22.54.png?fit=500%2C537&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.22.54.png?fit=737%2C791&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.22.54-500x537.png?resize=500%2C537" alt="Navpoints to be renumbered" width="500" height="537" class="aligncenter size-medium wp-image-1972" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.22.54.png?resize=500%2C537&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.22.54.png?w=737&amp;ssl=1 737w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
If you&#8217;re looking at a book with, say, twenty points, or two hundred, though, forget it. How can we of the scriptless masses automate this vile task? Well, I’ve got it down to about half a minute.</p>
<ol>
<li>
With your NCX open, select Text > Remove Line Breaks.<br />
<a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.08.png"><img data-attachment-id="1973" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-12-25-08/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.08.png?fit=737%2C791&amp;ssl=1" data-orig-size="737,791" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="NCX with line breaks removed" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.08.png?fit=500%2C537&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.08.png?fit=737%2C791&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.08-500x537.png?resize=500%2C537" alt="NCX with line breaks removed" width="500" height="537" class="aligncenter size-medium wp-image-1973" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.08.png?resize=500%2C537&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.08.png?w=737&amp;ssl=1 737w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></li>
<li>Under the window&#8217;s Text Options menu, turn off Soft Wrap Text, if it&#8217;s on. This makes it easier to see what you&#8217;re doing.<br />
<a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.35.png"><img data-attachment-id="1974" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-12-25-35/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.35.png?fit=748%2C799&amp;ssl=1" data-orig-size="748,799" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flattened NCX with text-wrap off" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.35.png?fit=500%2C534&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.35.png?fit=739%2C789&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.35-500x534.png?resize=500%2C534" alt="Flattened NCX with text-wrap off" width="500" height="534" class="aligncenter size-medium wp-image-1974" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.35.png?resize=500%2C534&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-12.25.35.png?w=748&amp;ssl=1 748w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></li>
<li>Replace all <code>&amp;lt;navPoint</code> with <code>\r&amp;lt;navPoint</code><br />
<a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.01.54.png"><img data-attachment-id="1991" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-13-01-54/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.01.54.png?fit=651%2C232&amp;ssl=1" data-orig-size="651,232" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Find dialog for breaking navpoints onto new lines" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.01.54.png?fit=500%2C178&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.01.54.png?fit=651%2C232&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.01.54-500x178.png?resize=500%2C178" alt="Find dialog for breaking navpoints onto new lines" width="500" height="178" class="aligncenter size-medium wp-image-1991" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.01.54.png?resize=500%2C178&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.01.54.png?w=651&amp;ssl=1 651w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
Now each navpoint is on its own line.<br />
<a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.20.png"><img data-attachment-id="1992" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-13-02-20/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.20.png?fit=737%2C791&amp;ssl=1" data-orig-size="737,791" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Each navpoint on a new line" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.20.png?fit=500%2C537&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.20.png?fit=737%2C791&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.20-500x537.png?resize=500%2C537" alt="Each navpoint on a new line" width="500" height="537" class="aligncenter size-medium wp-image-1992" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.20.png?resize=500%2C537&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.20.png?w=737&amp;ssl=1 737w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></li>
<li>Select all lines except the first one, and click Text > Add/Remove Line Numbers&#8230;<br />
<a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.40.png"><img data-attachment-id="1993" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-13-02-40/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.40.png?fit=737%2C791&amp;ssl=1" data-orig-size="737,791" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Add/remove Line Numbers dialog" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.40.png?fit=500%2C537&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.40.png?fit=737%2C791&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.40-500x537.png?resize=500%2C537" alt="Add/remove Line Numbers dialog" width="500" height="537" class="aligncenter size-medium wp-image-1993" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.40.png?resize=500%2C537&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.40.png?w=737&amp;ssl=1 737w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
Fill out the dialog as shown and click “Number.” Now you have sequential numbers at the start of each line.<br />
<a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.44.png"><img data-attachment-id="1994" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-13-02-44/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.44.png?fit=737%2C791&amp;ssl=1" data-orig-size="737,791" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Navpoints with numbers next to them" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.44.png?fit=500%2C537&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.44.png?fit=737%2C791&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.44-500x537.png?resize=500%2C537" alt="Navpoints with numbers next to them" width="500" height="537" class="aligncenter size-medium wp-image-1994" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.44.png?resize=500%2C537&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.02.44.png?w=737&amp;ssl=1 737w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
Hmm .&nbsp;.&nbsp;. See where this is going?</li>
<li>Use a RegEx pattern to replace the playOrder values with the numbers you&#8217;ve just added. Depending on the source, some NCXs will use different patterns, but this is the pattern I have saved in my Find dialog:<br />
<a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.03.png"><img data-attachment-id="1995" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-13-03-03/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.03.png?fit=651%2C232&amp;ssl=1" data-orig-size="651,232" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Find dialog for renumbering navpoints" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.03.png?fit=500%2C178&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.03.png?fit=651%2C232&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.03-500x178.png?resize=500%2C178" alt="Find dialog for renumbering navpoints" width="500" height="178" class="aligncenter size-medium wp-image-1995" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.03.png?resize=500%2C178&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.03.png?w=651&amp;ssl=1 651w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
Replace all.</li>
<li>Viola! Your points are now renumbered.<br />
<a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.13.png"><img data-attachment-id="1996" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-13-03-13/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.13.png?fit=737%2C791&amp;ssl=1" data-orig-size="737,791" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Renumbered navpoints, still flat" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.13.png?fit=500%2C537&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.13.png?fit=737%2C791&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.13-500x537.png?resize=500%2C537" alt="Renumbered navpoints, still flat" width="500" height="537" class="aligncenter size-medium wp-image-1996" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.13.png?resize=500%2C537&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.13.png?w=737&amp;ssl=1 737w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
You can either leave the list flat or reflow the XML to nest it again. If you&#8217;re using BBEdit 11, you may want to install <a href="https://gist.github.com/ideabucket/5231db1261ed0f15bd59">Keith Bolland’s Reflow XML script</a> and assign a shortcut to it; in pre-11 versions, Markup > Tidy > Reflow Document&#8230; will do it.<br />
<a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.18.png"><img data-attachment-id="1997" data-permalink="https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/screenshot-2015-03-05-13-03-18/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.18.png?fit=737%2C791&amp;ssl=1" data-orig-size="737,791" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Navpoints renumbered and reflowed" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.18.png?fit=500%2C537&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.18.png?fit=737%2C791&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.18-500x537.png?resize=500%2C537" alt="Navpoints renumbered and reflowed" width="500" height="537" class="aligncenter size-medium wp-image-1997" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.18.png?resize=500%2C537&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/03/Screenshot-2015-03-05-13.03.18.png?w=737&amp;ssl=1 737w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></li>
</ol>
<p>Go forth and use your powers for good.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2015/03/05/renumbering-navpoints-in-bbedit-the-not-so-hard-way/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1970</post-id>	</item>
		<item>
		<title>Degristling the sausage: BBEdit 11 Edition</title>
		<link>https://ink.indiamos.com/2015/02/12/degristling-the-sausage-bbedit-11-edition/</link>
					<comments>https://ink.indiamos.com/2015/02/12/degristling-the-sausage-bbedit-11-edition/#comments</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Fri, 13 Feb 2015 02:25:58 +0000</pubDate>
				<category><![CDATA[e-books]]></category>
		<category><![CDATA[eprdctn]]></category>
		<category><![CDATA[production]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=1949</guid>

					<description><![CDATA[Almost two years ago, I wrote a post called “Degristling the sausage” to explain my method of using BBEdit to get a list of which CSS classes are actually applied in a given EPUB file, out of the sometimes hundreds that are included in the stylesheet. Apparently I’m not the only person who needs to&#8230; <a class="more-link" href="https://ink.indiamos.com/2015/02/12/degristling-the-sausage-bbedit-11-edition/">Continue reading <span class="screen-reader-text">Degristling the sausage: BBEdit 11 Edition</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><a href="https://www.flickr.com/photos/nlireland/5827912661"><img data-attachment-id="1951" data-permalink="https://ink.indiamos.com/2015/02/12/degristling-the-sausage-bbedit-11-edition/degristling2/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/degristling2.jpg?fit=751%2C271&amp;ssl=1" data-orig-size="751,271" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="The Sausage Room" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/degristling2.jpg?fit=500%2C180&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/degristling2.jpg?fit=739%2C267&amp;ssl=1" loading="lazy" width="739" height="267" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/degristling2.jpg?resize=739%2C267" alt="Women in uniforms standing at long tables, handling sausages." title="Sausage Room at Denny's Factory, Waterford" class="aligncenter size-full wp-image-1951" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/degristling2.jpg?w=751&amp;ssl=1 751w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/degristling2.jpg?resize=500%2C180&amp;ssl=1 500w" sizes="(max-width: 739px) 100vw, 739px" data-recalc-dims="1" /></a></p>
<p>Almost two years ago, I wrote a post called “<a href="http://ink.indiamos.com/2012/04/11/degristling-the-sausage/">Degristling the sausage</a>” to explain my method of using BBEdit to get a list of which CSS classes are <em>actually applied</em> in a given EPUB file, out of the sometimes hundreds that are included in the stylesheet. Apparently I’m not the only person who needs to do this sort of thing, because that post has stayed in the top four pages on this site ever since, and <a href="http://www.booknetcanada.ca/blog/2015/2/12/judging-a-book-by-its-css.html">clever people keep linking to it</a>.</p>
<p><span id="more-1949"></span></p>
<p>But BareBones recently released <a href="http://www.barebones.com/products/bbedit/">BBEdit 11</a>, and although I’m usually a lateish adopter on software updates—particularly when they remove features I&#8217;ve been using for years, such as HTML Tidy (I now use <a href="http://www.balthisar.com/software/tidy/">Balthisar Tidy</a> to make my HTML readable)—this time I waited a mere three months before buying the new version, and I immediately wished I’d done so earlier. Because why? Because among <a href="http://www.barebones.com/support/bbedit/arch_bbedit11.html">many other nice new features</a>,</p>
<blockquote>
<p>There’s a new button in the Find and Multi-File Search windows: “Extract”. This button (backed by a command on the Search menu, so you can assign a keyboard equivalent to it) will locate all occurrences of the search string (across multiple files, if appropriate) and those occurrences will be collected into a new untitled text document, separated by line breaks.</p>
</blockquote>
<p>I had already meant to post an update to the 2012 post, as I&#8217;ve made the process a bit more efficient over the years, but this Extract button <em>radically</em> simplifies things. The new process is as follows:</p>
<ol>
<li>
<p>Unzip the EPUB file. (You can edit zipped EPUBs in BBedit, but you won’t get an accurate preview if the pages link to an external CSS file; also, it’s easier to overwrite changes and lose your work if you’re juggling multiple search results windows, as I usually am. So I work on a zipped file only if I’m making very minor changes.) I keep P. Durrant’s <a href="http://www.mobileread.com/forums/showthread.php?t=55681">ePub Zip/Unzip app</a> in my Finder toolbar so I can drag and drop.</p>
</li>
<li>
<p>Drag the whole folder onto the BBEdit application to open it as a project.</p>
</li>
<li>
<p>Open the Multi-File Search dialog (shift-command-F) and in the &#8220;Find:&#8221; box put<br />
<code>class=".*?"</code></p>
</li>
<li>Select your project in the “Search in:” box,<br />
<a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.06.55-e1423794760416.png"><img data-attachment-id="1955" data-permalink="https://ink.indiamos.com/2015/02/12/degristling-the-sausage-bbedit-11-edition/screenshot-2015-02-12-21-06-55/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.06.55-e1423794760416.png?fit=630%2C565&amp;ssl=1" data-orig-size="630,565" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Multi-File Search" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.06.55-e1423794760416.png?fit=500%2C448&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.06.55-e1423794760416.png?fit=630%2C565&amp;ssl=1" loading="lazy" width="500" height="448" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.06.55-e1423794760416-500x448.png?resize=500%2C448" alt="The correctly set dialog box"  style="max-width: 100%;" class="aligncenter size-medium wp-image-1955" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.06.55-e1423794760416.png?resize=500%2C448&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.06.55-e1423794760416.png?w=630&amp;ssl=1 630w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
make sure “Search nested folders” under “Options&#8230;” is checked,<br />
<a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.07.23-e1423794796872.png"><img data-attachment-id="1956" data-permalink="https://ink.indiamos.com/2015/02/12/degristling-the-sausage-bbedit-11-edition/screenshot-2015-02-12-21-07-23/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.07.23-e1423794796872.png?fit=630%2C565&amp;ssl=1" data-orig-size="630,565" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Multi-File Search Options" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.07.23-e1423794796872.png?fit=500%2C448&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.07.23-e1423794796872.png?fit=630%2C565&amp;ssl=1" loading="lazy" width="500" height="448" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.07.23-e1423794796872-500x448.png?resize=500%2C448" alt="The correctly set Options dropdown"  style="max-width: 100%;" class="aligncenter size-medium wp-image-1956" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.07.23-e1423794796872.png?resize=500%2C448&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.07.23-e1423794796872.png?w=630&amp;ssl=1 630w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a><br />
and click “Extract.”<em>Poof!</em> This creates a new document containing just the class attributes—probably several thousand lines long.<br />
<a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.19.22-e1423794873177.png"><img data-attachment-id="1961" data-permalink="https://ink.indiamos.com/2015/02/12/degristling-the-sausage-bbedit-11-edition/screenshot-2015-02-12-21-19-22/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.19.22-e1423794873177.png?fit=679%2C584&amp;ssl=1" data-orig-size="679,584" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Extract results" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.19.22-e1423794873177.png?fit=500%2C430&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.19.22-e1423794873177.png?fit=679%2C584&amp;ssl=1" loading="lazy" width="500" height="430" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.19.22-e1423794873177-500x430.png?resize=500%2C430" alt="A screenshot of the new document containing the extracted text. My example has 5950 lines." style="max-width: 100%;" class="aligncenter size-medium wp-image-1961" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.19.22-e1423794873177.png?resize=500%2C430&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2015/02/Screenshot-2015-02-12-21.19.22-e1423794873177.png?w=679&amp;ssl=1 679w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></li>
<li>
<p>Using the regular Find dialog, replace<br />
<code>class="(.*?)"\r</code><br />
with<br />
<code>\1\r</code><br />
to strip off everything except the class name.</p>
</li>
<li>
<p>Use Text &gt; Sort Lines&#8230; to sort the list.</p>
</li>
<li>
<p>Use Text &gt; Process Duplicate Lines&#8230; to leave only a single instance of each class.</p>
</li>
</ol>
<p><em>Viola!</em></p>
<p>“Extract” is not one of the command options when you’re creating a text factory, but you can automate steps 5–7 by placing this file in ~/Library/Application Support/BBEdit/Text Filters/: <a href="https://dl.dropboxusercontent.com/u/336881/ink/Unwrap%2BSort%2BDedupe_classes.textfactory">Unwrap+Sort+Dedupe_classes.textfactory</a>. Then, from your file of extracted occurrences, select Text &gt; Apply Text Filter &gt; Unwrap+Sort+Dedupe_classes.</p>
<p>Easy peasy.</p>
<p>I still like that the old method shows me which HTML elements each class is attached to, and also pulls out any locally applied style attributes. But the convenience of this two-step process outweighs those features, for me.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2015/02/12/degristling-the-sausage-bbedit-11-edition/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1949</post-id>	</item>
		<item>
		<title>One hour and eleven minutes of me trying not to swear</title>
		<link>https://ink.indiamos.com/2014/07/01/one-hour-and-eleven-minutes-of-me-trying-not-to-swear/</link>
					<comments>https://ink.indiamos.com/2014/07/01/one-hour-and-eleven-minutes-of-me-trying-not-to-swear/#respond</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Wed, 02 Jul 2014 00:36:22 +0000</pubDate>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[bookbinding]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[print-on-demand]]></category>
		<category><![CDATA[printing]]></category>
		<category><![CDATA[production]]></category>
		<category><![CDATA[Typesetting]]></category>
		<category><![CDATA[typography]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=1924</guid>

					<description><![CDATA[The awesome Laura Dawson invited me to do a webinar on the basics of book design, as part of a series for Bowker’s SelfPublishedAuthor.com. Our kindly hosts/co-presenters at Data Conversion Laboratory have posted a video of the session, so now you can follow along with bated breath as I try to remember not to say&#8230; <a class="more-link" href="https://ink.indiamos.com/2014/07/01/one-hour-and-eleven-minutes-of-me-trying-not-to-swear/">Continue reading <span class="screen-reader-text">One hour and eleven minutes of me trying not to swear</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>The awesome <a href="http://ljndawson.org/">Laura Dawson</a> invited me to do a webinar on the basics of book design, as part of a series for Bowker’s <a href="http://selfpublishedauthor.com/">SelfPublishedAuthor.com</a>. Our kindly hosts/co-presenters at Data Conversion Laboratory have posted a <a href="http://www.dclab.com/webinars/making-beautiful-books" title="Making Beautiful Books">video of the session</a>, so now you can follow along with bated breath as I try to remember not to say “fuck” for <em>more than an hour</em>.<a href="https://ink.indiamos.com/2014/07/01/one-hour-and-eleven-minutes-of-me-trying-not-to-swear/#footnote_0_1924" id="identifier_0_1924" class="footnote-link footnote-identifier-link" title="Yes, my portion of the presentation ran about fifteen minutes too long, because I hadn&rsquo;t timed it beforehand and couldn&rsquo;t see my system clock while screen-sharing the slides from PowerPoint. Sorry, Allan.">1</a> <em>Can she do it? Watch the video to find out!</em></p>
<p>Because the video is video and my slides are about fiddly details, I&#8217;ve made my segment of the presentation into a PDF, so you can see what I&#8217;m talking about: <a href="http://ink.indiamos.com/blog/wp-content/uploads/2014/07/Bowker-DCL_webinar_20140630_sm2.pdf">“Making Beautiful Books” webinar slides</a> (2 MB)<br />
<span id="more-1924"></span></p>
<p>I don’t think I said anything too terribly incorrect, though I have a bad feeling that what I call a “deckle edge” is actually called something else by printers. Whatever. That’s what it’s called in the world of my head.</p>
<p>I realized also, as soon as we were done, that I should have added to the “Resources” list that among the people one should consult are those professional book designers I recommended hiring. Because of course one’s designers will have clever ideas about how one’s book could be made into an even more irresistible package, as <a href="https://twitter.com/SCauleyDesign">@SCauleyDesign</a> did with that spot varnish on <a href="http://www.cntimesbooks.com/povnyc/"><cite>Point of View New York City</cite></a> that I show in the webinar.</p>
<ol class="footnotes"><li id="footnote_0_1924" class="footnote">Yes, my portion of the presentation ran about fifteen minutes too long, because I hadn’t timed it beforehand and couldn’t see my system clock while screen-sharing the slides from PowerPoint. <em>Sorry, Allan.</em></li></ol>]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2014/07/01/one-hour-and-eleven-minutes-of-me-trying-not-to-swear/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1924</post-id>	</item>
		<item>
		<title>Manually editing ruby on Chinese characters in InDesign</title>
		<link>https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/</link>
					<comments>https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/#comments</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Mon, 24 Feb 2014 02:01:06 +0000</pubDate>
				<category><![CDATA[books]]></category>
		<category><![CDATA[Typesetting]]></category>
		<category><![CDATA[typography]]></category>
		<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=1881</guid>

					<description><![CDATA[WARNING: The following is exceedingly geeky, but I&#8217;m posting it here so that six months from now, when I&#8217;ve utterly forgotten how I did this, I can look it up. And who knows? Maybe someone else will want to know how to do this, too. Or will want to tell me I&#8217;ve been doing it&#8230; <a class="more-link" href="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/">Continue reading <span class="screen-reader-text">Manually editing ruby on Chinese characters in InDesign</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><span style="color:#C00;"><strong>WARNING:</strong> The following is exceedingly geeky, but I&#8217;m posting it here so that six months from now, when I&#8217;ve utterly forgotten how I did this, I can look it up. And who knows? Maybe someone else will want to know how to do this, too. Or will want to tell me I&#8217;ve been doing it all wrong.</span></p>
<p>Although the Chinese-owned publishing company where I now am managing editor mostly produces English-only books, occasionally I do have to deal with Chinese characters in InDesign. This week, I started working on a series of dual-language poetry books that were previously published in China, and I want to rework these into a single parallel-text edition for U.S. readers, particularly students. Fortunately, the Chinese edition was set in InDesign—this is not always the case—so I&#8217;m able to rework the files we received from the original publisher.<br />
<span id="more-1881"></span></p>
<p>Immediately I set about editing the style sheets—changing their names to ones I could actually read, for instance—and rejiggering things to enable matching the originals and translations across spreads, stanza by stanza if not line by line. In particular, I wanted to make the Chinese text slightly larger and the English text slightly smaller. I also wanted to replace all the English fonts with more tasteful ones and simplify the palette of Chinese fonts.</p>
<p>The Chinese versions of the poems in these books all have little <a href="http://www.pinyin.info/">pinyin</a> pronunciation guides over each character, and at first I thought they were part of the fonts themselves. To my delight, however, I found that when I changed the Chinese fonts, the pronunciation guides stayed in place and scaled with the text. These pronunciation guides are, it turns out, called <a href="http://en.wikipedia.org/wiki/Ruby_character"><em>ruby</em></a> annotations, and if you view the Chinese in InDesign&#8217;s built-in text editor, you can see the ruby label wrapping each character. (Don&#8217;t worry; a screenshot&#8217;s coming up.)</p>
<p>Unfortunately, the original book used a font that didn&#8217;t contain all the characters needed to set these poems. I don&#8217;t know much about Chinese fonts, but from my experience with Chinese-language files thus far, this seems like a common issue. There are several <a href="http://en.wikipedia.org/wiki/Chinese_character_encoding">Chinese character encodings</a>, and sometimes the glyph you need will not appear in the font you&#8217;re using. When this happens, sometimes the compositor will swap in a different font just for that character, or sometimes, as they did in these books, they will insert the missing character as one or more pieces of outlined type, grouped and anchored inline:</p>
<p><a href="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01_before.png"><img data-attachment-id="1882" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby01_before/" data-orig-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01_before.png?fit=841%2C546&amp;ssl=1" data-orig-size="841,546" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Embedded outlined character" data-image-description="" data-medium-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01_before.png?fit=500%2C324&amp;ssl=1" data-large-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01_before.png?fit=739%2C480&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01_before-500x324.png?resize=500%2C324" alt="an InDesign layout having an embedded outlined character" width="500" height="324" class="aligncenter size-medium wp-image-1882" srcset="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01_before.png?resize=500%2C324&amp;ssl=1 500w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01_before.png?w=841&amp;ssl=1 841w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>I assume this is done using some plug-in, or that it&#8217;s a thing the CJK version of InDesign handles automatically, but in any case, the ruby was somehow then wrapped around this anchored image. So when I changed the Chinese font and made it larger, these anchored images didn&#8217;t scale. Their ruby text <em>did</em> scale, but it was no longer aligned properly. I could scale the embedded graphic manually and move the ruby up using baseline shift, but nothing <em>really</em> lined up, the ruby was off-center, and the style of the glyph didn&#8217;t match the surrounding text, of course. Furthermore, I thought these missing characters might exist in the new font I&#8217;d chosen, and if that was the case, I&#8217;d far rather replace the embedded images with live text. If I just pasted in a new character, however, I couldn&#8217;t add a ruby label to it, nor could I move the new character inside the existing ruby tags to replace the anchored image, although I could see these in InDesign&#8217;s text editor view:</p>
<p><a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01b_markers.png"><img data-attachment-id="1883" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby01b_markers/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01b_markers.png?fit=492%2C308&amp;ssl=1" data-orig-size="492,308" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="How ruby appears in InDesign&#8217;s text editor view" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01b_markers.png?fit=492%2C308&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01b_markers.png?fit=492%2C308&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby01b_markers.png?resize=492%2C308" alt="How ruby appears in InDesign&#039;s text editor view" width="492" height="308" class="aligncenter size-full wp-image-1883" data-recalc-dims="1" /></a></p>
<p>So I poked around in the InDesign forums and found <a href="http://forums.adobe.com/message/5660376">a post by David W. Goodrich</a> recommending <a href="http://in-tools.com/products/plugins/world-tools-pro/">World Tools Pro ($179)</a>, <a href="http://forums.adobe.com/thread/1275320?tstart=0">a post by Manish Sharma</a> explaining how to launch the InDesign in CJK mode, and <a href="http://forums.adobe.com/thread/944705">a post by John Hawkinson</a> saying you can edit ruby if you pull the text out as a snippet. In the latter thread, Jongware posted a &#8220;Poor Man&#8217;s Ruby Editor,&#8221; but I didn&#8217;t try this; instead, I decided to see if I could figure out the snippet method.</p>
<p>First, I had to look up how to create a snippet, since I&#8217;d never done so before except by accident. But eventually, I came up with the following process.</p>
<p><strong>1. Figure out what the Chinese character should be.</strong><br />
I can&#8217;t read, write, or speak one word of Chinese. I have no idea how anyone ever manages to type it on a U.S. keyboard layout. But I figured out two ways to identify these missing characters.</p>
<p><strong>(a) Search for the pinyin transliteration using the pronunciation lookup at <a href="http://ctext.org/dictionary.pl?if=en">ctext.org</a></strong></p>
<p><a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby02_lookup.png"><img data-attachment-id="1884" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby02_lookup/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby02_lookup.png?fit=909%2C787&amp;ssl=1" data-orig-size="909,787" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Looking up a character by its pinyin transliteration, at ctext.org" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby02_lookup.png?fit=500%2C432&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby02_lookup.png?fit=739%2C640&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby02_lookup-500x432.png?resize=500%2C432" alt="Looking up a character by its pinyin transliteration, at ctext.org" width="500" height="432" class="aligncenter size-medium wp-image-1884" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby02_lookup.png?resize=500%2C432&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby02_lookup.png?w=909&amp;ssl=1 909w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>and then visually scan the search results until I find my character:</p>
<p><a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby03_found.png"><img data-attachment-id="1885" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby03_found/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby03_found.png?fit=945%2C677&amp;ssl=1" data-orig-size="945,677" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Locating the character I wish to replace, at ctext.org" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby03_found.png?fit=500%2C358&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby03_found.png?fit=739%2C529&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby03_found-500x358.png?resize=500%2C358" alt="Locating the character I wish to replace, at ctext.org" width="500" height="358" class="aligncenter size-medium wp-image-1885" srcset="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby03_found.png?resize=500%2C358&amp;ssl=1 500w, https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby03_found.png?w=945&amp;ssl=1 945w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>When I click on the correct character, I get a page of handy information about it, including any text on ctext.org that includes it.</p>
<p><a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby04_info.png"><img data-attachment-id="1886" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby04_info/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby04_info.png?fit=1068%2C688&amp;ssl=1" data-orig-size="1068,688" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="The ctext.org information page for the character I&#8217;m replacing" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby04_info.png?fit=500%2C322&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby04_info.png?fit=739%2C476&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby04_info-500x322.png?resize=500%2C322" alt="The ctext.org information page for the character I&#039;m replacing" width="500" height="322" class="aligncenter size-medium wp-image-1886" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby04_info.png?resize=500%2C322&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby04_info.png?resize=1024%2C659&amp;ssl=1 1024w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby04_info.png?w=1068&amp;ssl=1 1068w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>In this case, I found text that (almost) matches my original, confirming that I&#8217;ve got the right one.</p>
<p>Alternatively, since my text is a classic and I&#8217;m pretty sure it&#8217;s online somewhere, I could just <strong>(b) search Google or <a href="http://ctext.org/">ctext.org</a> for a line of text above or below the one I&#8217;m working on</strong>, and find the missing character that way. This method is faster, and I found that in at least one case, the outlined character in the original layout appeared to be the wrong one, or the ruby label was wrong. (Yes, I&#8217;m going to have someone who actually knows Chinese proofread these pages, when I&#8217;m done; I&#8217;m crazy but not stupid. Or stupid but not crazy. One of those&#160;.&#160;.&#160;.)</p>
<p><strong>2. Paste the correct character into the InDesign document next to the original one.</strong><br />
It pastes in at the right size and in the right font, and, sure enough the new font I&#8217;m using actually includes this character. Whee! However, the ruby label is missing.</p>
<p><a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby05_pasted.png"><img data-attachment-id="1887" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby05_pasted/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby05_pasted.png?fit=351%2C135&amp;ssl=1" data-orig-size="351,135" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="The live Chinese character pasted into InDesign next to the outlined, ruby-labeled version" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby05_pasted.png?fit=351%2C135&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby05_pasted.png?fit=351%2C135&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby05_pasted.png?resize=351%2C135" alt="The live Chinese character pasted into InDesign next to the outlined, ruby-labeled version" width="351" height="135" class="aligncenter size-full wp-image-1887" data-recalc-dims="1" /></a></p>
<p><strong>3. Select both the Chinese character and the ruby-annotated graphic and Export -> Adobe InDesign Tagged Text.</strong></p>
<p><a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby06_export.png"><img data-attachment-id="1888" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby06_export/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby06_export.png?fit=748%2C298&amp;ssl=1" data-orig-size="748,298" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="InDesign&#8217;s Tagged Text Export Options dialog" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby06_export.png?fit=500%2C199&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby06_export.png?fit=739%2C294&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby06_export-500x199.png?resize=500%2C199" alt="InDesign&#039;s Tagged Text Export Options dialog" width="500" height="199" class="aligncenter size-medium wp-image-1888" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby06_export.png?resize=500%2C199&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby06_export.png?w=748&amp;ssl=1 748w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>I use the Abbreviated option, since I don&#8217;t need most of the gunk that will be in this file, and ASCII mode, since exporting as Unicode got me weird results when I tried it.</p>
<p><strong>4. Open the resulting .txt file in a text editor.</strong> I use BBEdit, and I set it to display as XML, to add some color coding.</p>
<p><a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby07_tagged.png"><img data-attachment-id="1889" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby07_tagged/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby07_tagged.png?fit=686%2C722&amp;ssl=1" data-orig-size="686,722" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="A tagged text snipped exported from InDesign" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby07_tagged.png?fit=500%2C526&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby07_tagged.png?fit=686%2C722&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby07_tagged-500x526.png?resize=500%2C526" alt="A tagged text snipped exported from InDesign" width="500" height="526" class="aligncenter size-medium wp-image-1889" srcset="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby07_tagged.png?resize=500%2C526&amp;ssl=1 500w, https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby07_tagged.png?w=686&amp;ssl=1 686w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>It looks quite formidable, but all I&#8217;m really concerned with is the last line. Here are the business parts of that line:</p>
<p><a href="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby08_components.png"><img data-attachment-id="1890" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby08_components/" data-orig-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby08_components.png?fit=591%2C233&amp;ssl=1" data-orig-size="591,233" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Labeled detail of the last line of the exported snippet" data-image-description="" data-medium-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby08_components.png?fit=500%2C197&amp;ssl=1" data-large-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby08_components.png?fit=591%2C233&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby08_components-500x197.png?resize=500%2C197" alt="Labeled detail of the last line of the exported snippet" width="500" height="197" class="aligncenter size-medium wp-image-1890" srcset="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby08_components.png?resize=500%2C197&amp;ssl=1 500w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby08_components.png?w=591&amp;ssl=1 591w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>In fact, you can delete everything above this last line except the <code>&amp;lt;ASCII-MAC&amp;gt;</code>, to make it easier to see what you’re doing. The rest of the snippet code is mostly style definitions, which we don&#8217;t need since we&#8217;ll be pasting this snippet right back into the same document it came from.</p>
<p><strong>5. Cut and paste the unicode for the Chinese character (item 3) over the space where the embedded image was in the original ruby wrapper (item 2).</strong> You can delete the trailing &lt;cr:&gt;&lt;crstr:&gt;, so my entire revised snippet file is now just</p>
<p><a href="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby09_edited.png"><img data-attachment-id="1891" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby09_edited/" data-orig-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby09_edited.png?fit=517%2C54&amp;ssl=1" data-orig-size="517,54" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="My edited version of the exported snippet" data-image-description="" data-medium-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby09_edited.png?fit=500%2C52&amp;ssl=1" data-large-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby09_edited.png?fit=517%2C54&amp;ssl=1" loading="lazy" src="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby09_edited-500x52.png?resize=500%2C52" alt="My edited version of the exported snippet" width="500" height="52" class="aligncenter size-medium wp-image-1891" srcset="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby09_edited.png?resize=500%2C52&amp;ssl=1 500w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby09_edited.png?w=517&amp;ssl=1 517w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p><strong>6. Save the snippet and drag the file back onto your InDesign window. Click-drag to place the snippet.</strong></p>
<p><a href="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby10_placed.png"><img data-attachment-id="1892" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby10_placed/" data-orig-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby10_placed.png?fit=352%2C250&amp;ssl=1" data-orig-size="352,250" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="My new snippet placed in the InDesign document" data-image-description="" data-medium-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby10_placed.png?fit=352%2C250&amp;ssl=1" data-large-file="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby10_placed.png?fit=352%2C250&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby10_placed.png?resize=352%2C250" alt="My new snippet placed in the InDesign document" width="352" height="250" class="aligncenter size-full wp-image-1892" data-recalc-dims="1" /></a></p>
<p>Note how the ruby annotation sits completely above the top of the text box; it&#8217;s welded to that glyph, though, I swear.</p>
<p><strong>7. Copy and paste the new rubyfied character into your text, replacing the old image and un-rubied character.</strong></p>
<p><a href="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby11_fixed.png"><img data-attachment-id="1893" data-permalink="https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/ruby11_fixed/" data-orig-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby11_fixed.png?fit=296%2C129&amp;ssl=1" data-orig-size="296,129" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="The new ruby-annotated character in place in the text" data-image-description="" data-medium-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby11_fixed.png?fit=296%2C129&amp;ssl=1" data-large-file="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby11_fixed.png?fit=296%2C129&amp;ssl=1" loading="lazy" src="https://i0.wp.com/ink.indiamos.com/blog/wp-content/uploads/2014/02/ruby11_fixed.png?resize=296%2C129" alt="The new ruby-annotated character in place in the text" width="296" height="129" class="aligncenter size-full wp-image-1893" data-recalc-dims="1" /></a></p>
<p>Now, how do you say, “Et voilà!” in Chinese?</p>
<p>It looks like a lot of trouble, but I can now round-trip a character in less than a minute, and fortunately there aren&#8217;t very many of these. Still, if there&#8217;s some easier way to do this, I&#8217;m all ears.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2014/02/23/manually-editing-ruby-on-chinese-characters-in-indesign/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1881</post-id>	</item>
		<item>
		<title>Castoff Calculator</title>
		<link>https://ink.indiamos.com/2013/12/08/castoff-calculator/</link>
					<comments>https://ink.indiamos.com/2013/12/08/castoff-calculator/#respond</comments>
		
		<dc:creator><![CDATA[India]]></dc:creator>
		<pubDate>Sun, 08 Dec 2013 04:39:12 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Typesetting]]></category>
		<guid isPermaLink="false">http://ink.indiamos.com/?p=1861</guid>

					<description><![CDATA[Yesterday at work I was generating price breakdowns for a bunch of POD printing situations, doing it the old-fashioned way by dedicating a separate chunk of a spreadsheet to each variation, when it occurred to me that maybe it would be easier to set up a dynamic calculator for these scenarios in Python, which I&#8217;ve&#8230; <a class="more-link" href="https://ink.indiamos.com/2013/12/08/castoff-calculator/">Continue reading <span class="screen-reader-text">Castoff Calculator</span> <span class="meta-nav" aria-hidden="true">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/dvanzuijlekom/9223287050/"><img data-attachment-id="1862" data-permalink="https://ink.indiamos.com/2013/12/08/castoff-calculator/11263225824_b75c2bb757_o/" data-orig-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2013/12/11263225824_b75c2bb757_o.jpg?fit=1600%2C795&amp;ssl=1" data-orig-size="1600,795" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="Calculator" data-image-description="" data-medium-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2013/12/11263225824_b75c2bb757_o.jpg?fit=500%2C248&amp;ssl=1" data-large-file="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2013/12/11263225824_b75c2bb757_o.jpg?fit=739%2C367&amp;ssl=1" loading="lazy" src="https://i2.wp.com/ink.indiamos.com/blog/wp-content/uploads/2013/12/11263225824_b75c2bb757_o-500x248.jpg?resize=500%2C248" alt="Wang 700 Advanced Programmable Calculator" width="500" height="248" class="aligncenter size-medium wp-image-1862" srcset="https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2013/12/11263225824_b75c2bb757_o.jpg?resize=500%2C248&amp;ssl=1 500w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2013/12/11263225824_b75c2bb757_o.jpg?resize=1024%2C508&amp;ssl=1 1024w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2013/12/11263225824_b75c2bb757_o.jpg?w=1600&amp;ssl=1 1600w, https://i1.wp.com/ink.indiamos.com/blog/wp-content/uploads/2013/12/11263225824_b75c2bb757_o.jpg?w=1478&amp;ssl=1 1478w" sizes="(max-width: 500px) 100vw, 500px" data-recalc-dims="1" /></a></p>
<p>Yesterday at work I was generating price breakdowns for a bunch of <acronym title="print on demand">POD</acronym> printing situations, doing it the old-fashioned way by dedicating a separate chunk of a spreadsheet to each variation, when it occurred to me that maybe it would be easier to set up a dynamic calculator for these scenarios in <a href="http://www.python.org/" title="Python Programming Language - Official Website">Python</a>, which I&#8217;ve been studying on and off (<a href="http://itp.indiamos.com/blog/2013/08/12/how-the-studying-is-going/">mostly off</a>) for a while now.</p>
<p>Then it occurred to me that I might not even have to leave the comfort of my spreadsheet, since most such applications include functions for calculating and doing other useful things. I rarely use anything more complex than <code>=sum()</code>, but I know the other stuff exists. Mostly I needed to be able to set up conditional behavior, so as long as there was an if/then function .&#160;.&#160;.<br />
<span id="more-1861"></span></p>
<p>It turns out that Google Spreadsheets, which is what I was working in, has an IF() and <a href="https://support.google.com/drive/table/25273?hl=en" title="Google spreadsheets function list">a host of other handy functions</a>. So I stayed up way too late building that calculator, for which there was no real purpose, since I&#8217;d already sent my boss a static spreadsheet with the numbers he needed.</p>
<p>But then today I still had spreadsheet-based forms on my mind, and I decided to tackle a project that had been on my Python to-do list for months—namely, a castoff calculator. I had built <a href="http://itp.indiamos.com/ICM/week9/castoff.html" title="PHPhun">a shitty one</a> in PHP a few years ago for a class, and then I forgot about it so utterly that when I needed to do a castoff more recently, I searched online for a Web-based calculator and was shocked and appalled to see my own domain name in the first hit. That form is embarrassingly useless, but since I&#8217;m working in print book production again (more on that later, I guess), I might occasionally have to do a castoff. Now seemed like a good time to replace it.</p>
<p>Behold, therefore! <a href="https://docs.google.com/spreadsheet/ccc?key=0Ai0pVnpORW3CdGZOTHA1enN1dTlDcFF4ejFQSExZMUE&#038;usp=sharing">Castoff Calculator</a>. To use it, you must first make a copy of the document; instructions are at the top of the first sheet. Aside from that little inconvenience, I think this version is actually pretty sweet, and I had fun making it. It would have been easier to manage the calculations in Python, because reusable variables and functions (shoutout to the sensible coding habits I picked up from <a href="https://www.coursera.org/course/programming1">Learn to Program: The Fundamentals</a>), but it&#8217;s hard to beat Google Spreadsheets for quick-and-dirty building and sharing.</p>
<p>Lemme know if you find this useful, if you find holes in it, or if there&#8217;s something else you think it should do.</p>
<p class="artcredit">Photo: <a href="http://www.flickr.com/photos/dvanzuijlekom/9223287050/">Wang 700 Advanced Programmable Calculator</a> by <a href="http://www.flickr.com/photos/dvanzuijlekom/">dvanzuijlekom</a>; <a href="http://creativecommons.org/licenses/by-sa/2.0/" title="Attribution-ShareAlike License">some rights reserved</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ink.indiamos.com/2013/12/08/castoff-calculator/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1861</post-id>	</item>
	</channel>
</rss>
