tinyapps.org / blog

Veganism for the rational #

Thanks to the generous CC BY-NC-SA licensing, Colorado Reed's succinct Veganism: An engineer's perspective. is reproduced here verbatim:

Why are you vegan?

I've heard this question quite a bit in the last year and a half of my veganism. And, well, it's a difficult question to answer since my veganism stems from a deep range of materials and experiences: books, research papers, and documentaries, as well as conversations and self-experimentation.

But as an engineer, I aim to both understand my rationale for going vegan and simplify it into a set of logical statements. So, by coalescing my research and experiences, I've created a set of three simple statements (with supporting references) that represent the fundamental arguments that brought me to veganism:

Logically, from the above three points, it follows that consuming animal products is unnecessary and causes destruction to the environment as well as billions of sentient animals. And while I initially didn't fully understand this logic, the research discussed in the "Further discussion" section below led me to understand that veganism was a logical conclusion that I couldn't overlook.

∴ I do not consume animal products

Of course, there was also a part of me that had a lot of subjective thoughts/questions about veganism, and resources such as http://yvfi.ca helped me navigate these channels.

Further discussion:

The first three references and discussions here address the point "Humans can thrive on a vegan diet", the second three references and discussions address the point "Consuming animal products is one of the largest individual contributions to climate change," and the final two references and discussions address "Consuming animal products results in slaughtering ~75 billion sentient farm animals each year — animals that want to live."

  1. Position of the American Dietetic Association: vegetarian diets, (2009): "It is the position of the American Dietetic Association that appropriately planned vegetarian diets, including total vegetarian or vegan diets, are healthful, nutritionally adequate, and may provide health benefits in the prevention and treatment of certain diseases. Well-planned vegetarian diets are appropriate for individuals during all stages of the life cycle, including pregnancy, lactation, infancy, childhood, and adolescence, and for athletes."
  2. Health effects of vegan diets, Craig, W., The American Journal of Clinical Nutrition, (2009) From the summary: "Vegans are thinner, have lower serum cholesterol and blood pressure, and enjoy a lower risk of CVD. BMD and the risk of bone fracture may be a concern when there is an inadequate intake of calcium and vitamin D. Where available, calcium- and vitamin D–fortified foods should be regularly consumed. … Vegans generally have an adequate iron intake and do not experience anemia more frequently than others. Typically, vegans can avoid nutritional problems if appropriate food choices are made. Their health status appears to be at least as good as other vegetarians, such as lactoovovegetarians."
  3. Plant foods have a complete amino acid composition. McDougall, J., Circulation, (2002). This concise note from Dr. John McDougall provides a number of important references regarding the nutritional completeness of a plant-based diet, e.g. "Therefore, a careful look at the founding scientific research and some simple math prove it is impossible to design an amino acid–deficient diet based on the amounts of unprocessed starches and vegetables sufficient to meet the calorie needs of humans. Furthermore, mixing foods to make a complementary amino acid composition is unnecessary."
  4. Reducing food's environmental impacts through producers and consumers. Poore J. and Nemecek T. Science, (2018). If you're going to read just one paper on the relationship between our food and impact it has on our environment, let it be this one. This meta-study created a dataset based on prior research that spanned ~40,000 farms in 100+ countries and analyzed food production of 40 food products that comprise ~90% of consumed calories. It assessed the environmental expense of the entire production cycle for these foods, taking into account green house gas emissions, land use, [fresh]water use/pollution and air pollution. Example conclusion: meat and dairy provide 18% of calories and 37% of protein, but uses 83% of farmland and produces 60% of agriculture's greenhouse gas emissions.
  5. Analysis and valuation of the health and climate change cobenefits of dietary change. Springmann M. et al. PNAS (2016) "The food system is responsible for more than a quarter of all greenhouse gas (GHG) emissions, of which up to 80% are associated with livestock production. Reductions in meat consumption and other dietary changes would ease pressure on land use and reduce GHG emissions. Transitioning toward more plant-based diets that are in line with standard dietary guidelines could reduce global mortality by 6–10% and food-related greenhouse gas emissions by 29–70% compared with a reference scenario in 2050."
  6. The Impacts of Dietary Change on Greenhouse Gas Emissions, Land Use, Water Use, and Health: A Systematic Review. PloS one, Aleksandrowicz, L. et al., (2016). "Agriculture is responsible for up to 30% of anthropogenic greenhouse gas (GHG) emissions, about 70% of freshwater use, and occupies more than one-third of all potentially cultivatable land, with animal-based foods being particularly major contributors to these environmental changes"
  7. Food and Agriculture Organization of the United Nations. FAOSTAT Statistics Database. Accessed 2 Oct 2018. Worldwide, over 75 billion farm animals each year are slaughtered. Note that this does not include the marine life slaughtered for seafood. Statistics on wild caught marine life are only tabulated by the tonnes and do not include bycatch (catching and killing the wrong type of fish, e.g. sharks in a tuna net), so it is difficult to count the amount of marine life slaughtered for seafood. Some extrapolation of FAO data leads to an estimate in the range of 1–2.75 trillion: http://fishcount.org.uk/published/std/fishcountstudy.pdf. From the FAO data, there are ~300 million worldwide dairy cows that must be forcibly impregnated in order to produce milk (cows, like all mammals, only produce milk when pregnant), and ~5 billion egg laying hens.
  8. The Cambridge Declaration on Consciousness 2012. A group of prominent neuroscientists created The Cambridge Declaration on Consciousness, in which they state their support for the idea that animals are conscious and aware in a similar way as humans. "The absence of a neocortex does not appear to preclude an organism from experiencing affective states. Convergent evidence indicates that non-human animals have the neuroanatomical, neurochemical, and neurophysiological substrates of conscious states along with the capacity to exhibit intentional behaviors. Consequently, the weight of evidence indicates that humans are not unique in possessing the neurological substrates that generate consciousness. Non-human animals, including all mammals and birds, and many other creatures, including octopuses, also possess these neurological substrates."

/misc | Jan 13, 2019

Opening and searching large text files in iOS #

is instantaneous with iVim (GitHub page):

/misc | Jan 08, 2019

3 book recommendations from Public Domain Day 2019 #

Sources: Duke University and The Public Domain Review

/misc | Jan 01, 2019

Twitter - Disable auto links in tweets #

Having set up IFTTT to autopost blog updates on a recovered Twitter handle, I did my best to forget all about it.

However, I recently discovered that Twitter automatically inserts hyperlinks for text that matches certain patterns (e.g., "Mail.app" becomes a link to said domain), prompting me to go back and delete such tweets, namely:

I was able to delete today's earlier tweet (Mojave - Where did DVD Player.app go?) and repost it with the hyperlink disabled (why can tweets not be edited?) by inserting a zero width space after the dot as explained by Amit Agarwal.

See also:

/misc | Oct 23, 2018

Backing up a large Gmail / G Suite account #

is theoretically possible via Google Takeout, but there are issues:

Got Your Back (GYB) does not suffer from these issues; messages are downloaded as individual EML files, sorted into folders by year, month, and day:

$ gyb --email name@example.com --action estimate

Select the actions you wish GYB to be able to perform for name@example.com

[ ]  0)  Gmail Backup And Restore - read/write mailbox access
[ ]  1)  Gmail Backup Only - read-only mailbox access
[ ]  2)  Gmail Restore Only - write-only mailbox access and label management
[*]  3)  Gmail Full Access - read/write mailbox access and message purge
[ ]  4)  No Gmail Access

[ ]  5)  Groups Restore - write to G Suite Groups Archive
[*]  6)  Storage Quota - Drive app config scope used for --action quota

      7)  Continue

Your browser has been opened to visit:


If your browser is on a different machine then press CTRL+C and
create a file called nobrowser.txt in the same folder as GYB.

Authentication successful.
Got 67100 Message IDs                                                           
GYB needs to examine 67100 messages
GYB already has a backup of 0 messages
GYB needs to estimate 67100 messages
Estimated size 26.47gb 67100/67100 messages 

$ gyb --email name@example.com --action backup

Using backup folder GYB-GMail-Backup-name@example.com
Got 67100 Message IDs                                                           
GYB needs to examine 67100 messages
GYB already has a backup of 0 messages
GYB needs to backup 67100 messages
backed up 67100 of 67100 messages                                               

GYB needs to refresh 0 messages

If desired, import the collection into Thunderbird via ImportExportTools.

If you need to copy the massive collection of EML files, tar it without compression to save a LOT of time (pv is of course optional, but very handy when tarring tens of thousands of files):

$ tar -c ./GYB-GMail-Backup-user\@example.com/ | pv -s $(gdu -sb ./GYB-GMail-Backup-user\@example.com/ | awk '{print $1}') > user\@example.com.tar
4.03GiB 0:00:23 [ 177MiB/s] [====>                             ] 15% ETA 0:02:08

* Attempting to split a ~26GB MBOX file by label via mbox_split.py or WB Optimum's script on which it is based did not avail.

UPDATE: Royce Williams kindly informs us of outtake, which "sync[s] Gmail to maildir...quickly", "uses the Gmail API to efficiently sync only deltas", and "can also be limited to a specific label". Crafted in Go by Google software engineer, Daniel Margolis. (On a related note, Evolution is swell for browsing and searching Maildir directories; add via Edit > Preferences > Mail Accounts > Add > Next > enter required info and deselect "Look up mail server details based on the entered e-mail address" > Next > for "Server Type:" select "Maildir-format mail directories" > select the "Mail Directory:" location, etc.)

/misc | Sep 25, 2018

Unexpected SCSI Command Failure: 00h - No SCSI controller error #

In an Adaptec SCSI Card 29320LPE's Adaptec SCSISelect Utility, neither "Format Disk" nor "Verify Disk Media" would work for two Fujitsu Ultra-320 SCSI 146GB (MAW3147NC) hard drives, immediately returning "Unexpected SCSI Command Failure" and "00h - No SCSI controller error". Both functions worked normally on two Seagate Ultra-320 SCSI 73.4GB (ST373405LC) drives.

When a Verify or Low Level Format is attempted on the hard drive, it responds with some error codes did not sound very promising:

If the error occurs in both Format and Verify, it usually indicates a defective drive. Contact the drive vendor for interpretation of other errors.

Happily, Unexpected SCSI command failure message when attempting low level format held the answer:

One reason for this could be the way the SCSI controller is set up to hand-shake with the device. This can be changed through the SCSISelect utility. Enter the SCSI Select utility by pressing CTRL-A on system boot or insert the SCSI Select diskette.

In the SCSI Select utility, take the option for Configure/View Host Adapter Settings. Then choose SCSI Device Configuration.

On the next screen you will see the SCSI ID's listed across the top and the options to set for each ID listed down the left side. For the SCSI ID of the hard drive that you are trying to verify or format, set Initiate Sync Negotiation to NO ( on U160/U320 controllers change Initiate Wide Negotiation = No), Enable Disconnection to NO, and Maximum Sync Transfer Rate to 5mb/sec. Exit the utility, saving the changes.

While "Verify Disk Media" failed if run first, running "Format Disk" then "Verify Disk Media" worked. Increasing the "Maximum Sync Transfer Rate" to 40MB/sec had no ill-effect and made verifying the format via hexdump much faster.

/misc | Sep 13, 2018

# On reputation #

Live never to be ashamed if anything you do or say is published around the world -- even if what is published is not true.

Illusions: The Adventures of a Reluctant Messiah by Richard Bach

A certain devotee asked Maharshi about some disagreeable statements made by a certain man well-known to Maharshi. He said, "I permit him to do so. I have permitted him already. Let him do so even more. Let others follow suit. Only let them leave me alone. If because of these reports no one comes to me, I shall consider it a great service done to me.

Talks with Sri Ramana Maharshi recorded by Munagala Venkataramiah

He who with equanimity surveys
Lustre of goodness, strife of passion, sloth
Of ignorance, not angry if they are,
Not angry when they are not: he who sits
A sojourner and stranger in their midst
Unruffled, standing off, saying--serene--
When troubles break, "These be the Qualities!"
He unto whom--self-centred--grief and joy
Sound as one word; to whose deep-seeing eyes
The clod, the marble, and the gold are one;
Whose equal heart holds the same gentleness
For lovely and unlovely things, firm-set,
Well-pleased in praise and dispraise; satisfied
With honour or dishonour; unto friends
And unto foes alike in tolerance;
Detached from undertakings,--he is named
Surmounter of the Qualities!

The Song Celestial, Or, Bhagavad-gîtâ translated by Edwin Arnold

/misc | Aug 03, 2018

Autoreply to SMS, MMS, and iMessage text messages without jailbreaking or driving #

by leveraging iOS 11's Do Not Disturb while driving feature:
  1. Settings > Do Not Disturb
  2. enable Do Not Disturb > DO NOT DISTURB WHILE DRIVING > Activate > Manually > back > Auto-Reply > enter desired mesage
  3. Settings > Control Center > Customize Controls > tap plus symbol next to Do Not Disturb While Driving
  4. swipe up to reveal Control Center > tap automobile icon to enable autoreplies


/misc | Jul 05, 2018

Add SRT subtitles to DVD / VIDEO_TS without re-encoding #


  1. Rip DVD to VIDEO_TS

  2. Losslessly convert and merge desired VOBs in VIDEO_TS to a single MPG1 via VOB2MPG or ffmpeg, e.g.,
    ffmpeg -i 'concat:VTS_01_1.VOB|VTS_01_2.VOB|VTS_01_3.VOB' -acodec copy -vcodec copy combined.mpg

  3. Run DVDStyler and select new project options (e.g., DVD-9 (8.5GB), NTSC 720x480, AC3, etc) > OK > No template

  4. File browser > drag MPG created in step 1 to the Titleset Manager at the bottom of the program window

  5. Right click "Menu 1" in the Titleset Manager > Delete > Yes

  6. Right click "Title 1" in the Titleset Manager > Properties...

    1. Verify that video and audio are set to "Copy" and that "do not remultiplex/transcode" is checked

    2. Delete "call last menu;" from "Post commands:"2

    3. Click the green plus symbol > select your SRT file3 > Open

    4. Click the ... button next to "Subtitle: srt"

    5. Select desired font face/size (the default 28pt Arial worked best, but there are many fans of PT Sans Narrow Bold) and fill color (light gray was more pleasing than the default yellow) > OK > OK

  7. File > Burn DVD... > select "just generate" to create new VIDEO_TS with subtitles > Start


  1. Merely concatenating VOBs via VOBMerge or cat *.vob > merged.vob resulted in problems with the playback timeline and location. See VOB files reporting wrong playing time and DVDVob2Mpg's homepage. The latter states in part, "VOB and VRO files contain the MPEG, but also various other data, and headers may be incomplete or wrong etc. Because of that, VOB and VRO files typically don't play well using media players ... Typical problems are: timing issues, not being able to show the progress properly, no way to skip forward, crashes, missing audio, audio off sync, only showing the first 5 seconds of the video etc."

  2. To resolve "Cannot jump to menu" error.

  3. Had to resave SRT in Notepad with UTF-8 encoding to resolve "Error 42 -- Illegal byte sequence -- decoding subtitle file at approx line..."

Alternate methods utilizing SubtitleCreator

/misc | Jun 28, 2018

NoFan CS-80 drive brackets are NOT screwless #

Purchased a NoFan CS-80 PC case after reading that it "offers 9 EZ-SWAP drive bays and screwless installation" and is "conveniently designed so that a drive can be easily attached or detached from a bay without any extra tool":

NoFan CS-80 drive bay trays are NOT screwless

Should have glanced at the manual first, which shows 2.5" and 3.5" drives being screwed into the caddy:

Is this what you would call screwless?

Was expecting something actually tool-less, like this Corsair hard drive tray, which is at least screwless for 3.5" drives (2.5" drives mount to the bottom with screws):

Corsair CC-8930040 hard drive tray

Even better would be something completely tray-less, like the Corsair Carbide 200R's drive cage (though its plastic tabs should really be metal):

Corsair Carbide 200R tool free drive cage

/misc | Jun 17, 2018

Subscribe or visit the archives