recentpopularlog in

handcoding : performance   75

[CotEditor performance issues with large files] 文字種によってファイルの終端の近くで矢印キー押下によるカーソル移動が極端に遅くなる · Issue #957 · coteditor/CotEditor
It looks like Karabiner might have a known performance issue when editing large files? Hopefully this might be fixed for v3.7.5, which isn’t out just yet (as of May 24, 2019).
coteditor  bugs  performance  2019  github  mac  macos  osx  software 
may 2019 by handcoding - Native image lazy-loading for the web!
“In this post, we'll look at the new loading attribute which brings native <img> and <iframe> lazy-loading to the web!. For the curious, here's a sneak preview of it in action:

<img src="celebration.jpg" loading="lazy" alt="..." />
<iframe src="video-player.html" loading="lazy"></iframe>

LWe are hoping to ship support for loading in Chrome 75 and are working on a deep-dive of the feature we'll publish soon. Until then, let's dive into how loading works.”
chrome  images  performance  optimization  2019  chrome75  addyosmani 
april 2019 by handcoding
What's new on CotEditor 3.6.8 - CotEditor
(Well, this seems like a good sign—)
“Enable the noncontiguous layout only with large documents.
“This change may improve the editor’s drawing and scrolling behaviors.”

More about “noncontiguous layout”:
“Noncontiguous layout is an optional layout manager behavior. Previously, both glyph generation and layout were always performed, in order, from the beginning to the end of the document. When noncontiguous layout is turned on, however, the layout manager gains the option of performing glyph generation or layout for one portion of the document without having done so for previous sections. This can provide significant performance improvements for large documents.

“Noncontiguous layout is not turned on automatically because direct clients of NSLayoutManager typically have relied on the previous behavior—for example, by forcing layout for a given glyph range, and then assuming that previous glyphs would therefore be laid out.”
coteditor  performance  mac  macos  osx  2018  noncontiguous  layout  software 
december 2018 by handcoding
A native lazy load for the Web platform
“A new Chrome feature dubbed ‘Blink LazyLoad’ is designed to dramatically improve performance by deferring the load of below-the-fold images and third party iFrames.”
chrome  iframes  lazyload  2018  performance  optimization 
august 2018 by handcoding
Introducing The Website Speed Test Image Analysis Tool – Smashing Magazine
"Enter Website Speed Test, a free and drop-dead-simple tool that leverages our (Cloudinary’s) image smarts to let you measure, diagnose and (crucially) communicate about the image performance of any website. Better yet, it’s built on top of, and integrated in, Pat Meenan’s WebPagetest."
speed  performance  optimization  2017 
july 2017 by handcoding
Getting Info From iTunes — Noodlings
"The last one (I don’t know exactly when it was released but it was the last one I discovered) is iTunesLibrary (ITLib) and it’s a bit easy to miss because, from what I can tell, it is not a part of the OS, but iTunes itself. You can find the framework under /Library/Frameworks (not /System/Library/Frameworks). It provides similar functionality to the MediaLibrary framework, but specific to iTunes.

“With so many options, which do you use? For the most part, they return the same information though it depends on the version of iTunes. With some versions, one API may return some special playlist that the others don’t. Also, ML is asynchronous while the others are synchronous. I don’t see that as a big deal either way as you can convert one into the other with a tiny bit of work.

"The big differentiating factor is performance. Here are the results for getting a list of playlists for my library:

"XML: 1.66s
ML: 18.79s
ITLib: 0.84s"
itunes  library  performance  2017  hazel  osx  mac  music  launchbar 
may 2017 by handcoding
Blocklisting/Blocked Graphics Drivers - MozillaWiki
"If you would like to forcibly enable a graphics feature that is blocked on your system, follow these instructions. Warning: do this at your own risk. There usually are good reasons why features are blocked."
thunderbird  acceleration  performance  2016 
july 2016 by handcoding
INDIRECT function - Office Support
Apparently “Indirect” is one of those volatile functions that can slow down Excel because Excel has to re-calculate them even each time you scroll. (Yup—the audit spreadsheet has some of these, but I’m not quite sure how to fix them.)
excel  performance  software  2016 
june 2016 by handcoding
10 ways to improve Excel performance - TechRepublic
(On speeding up Excel:)
"Clean things up
Create a backup so you can reclaim functionality at a later date and then delete everything you no longer use. In doing so, you'll minimize the used range. To determine the used range, press [Ctrl]+[End]. Then, delete all rows and columns below and to the right of your real last used cell.”

"Avoid multiple volatile functions
A volatile function recalculates every time there's a change in the worksheet, and that slows things down. An efficient alternative is to enter the volatile function by itself and then reference that cell in your formulas. The function will still calculate as expected, but only once instead of hundreds of times. Examples of volatile functions are RAND(), RANDBETWEEN(), NOW(), TODAY(), OFFSET(), CELL(), and INDIRECT().”

"Use ISERROR() to update old error-masking formulas
If you've upgraded to a Ribbon version of Excel, you can replace most of your convoluted IF() masks with the IFERROR() function:
This function is more efficient than the pre-Ribbon solution of using IF() in the following form:
excel  performance  2011  techrepublic  conditionalformatting  formatting  formulas  canonical 
june 2016 by handcoding
Slow Excel Spreadsheet? Try this.
(Whoops—looks like if you end up with duplicate conditional-formatting rules, it can really slow down Excel.)
"Duplicate Conditional Formatting Rules. Conditional formatting can be a processor-intensive task if your rules aren’t set up right. Manage your conditional formatting rules (2007) via the ribbon at Home > Conditional Formatting > Manage Rules… Try to consolidate similar rules into one rule (e.g. a rule for an entire column instead of a rule for each cell in the column)."
excel  performance  2009  conditionalformatting  formatting 
june 2016 by handcoding
Exploring Conditional Format Performance Part 1: What’s slow, whats buggy and whats faster! | Excel and UDF Performance Stuff
"To save time, Excel only does final formatting for the part of the results you can see on the screen. (so large screens are slower than small ones, and zooming out a long way is slower!). When you have a lot of conditional formats this can cause very noticeable delays in scrolling a page up or down,"
excel  2013  conditionalformatting  formatting  performance 
june 2016 by handcoding
Don&#39;t advertise .show() on the front page · Issue #88 · jquery/
via @nathansmith: "Interesting, never realized jQuery's .hide() and .show() methods were so expensive…"
jquery  javascript  show  hide  performance  optimization  2015 
february 2015 by handcoding
Reporting a Performance Problem - Mozilla | MDN
"This article will guide you in reporting a performance problem using the Gecko Profiler extension."
firefox  performance  profiling  2015  mdn 
january 2015 by handcoding
AdBlock Plus’s effect on Firefox’s memory usage | Nicholas Nethercote
"Second, there’s an overhead of about 4 MiB per iframe, which is mostly due to ABP injecting a giant stylesheet into every iframe. Many pages have multiple iframes, so this can add up quickly. For example, if I load TechCrunch and roll over the social buttons on every story (thus triggering the loading of lots of extra JS code), without ABP, Firefox uses about 194 MiB of physical memory. With ABP, that number more than doubles, to 417 MiB."
firefox  adblock  adblockplus  extensions  2014  memory  performance 
december 2014 by handcoding
Stop Basing Pay on Performance Reviews
"We believe that traditional performance reviews do little to motivate people. The way to drive high performance is through honest feedback that employees and managers really hear. Think back to the last performance reviews you received and conducted: Does anyone really hear anything except whether they’ve met their goals and are eligible for their full bonuses? Does anyone feel free to say anything about the boss’s shortcomings?"
work  reviews  performance  hrc 
december 2014 by handcoding
CSS Triggers...
Via @aerotwist: "Heyo! I’ve made a handy reference for whether changing any given CSS property triggers layout, paint or composite"
css  layout  paint  composite  2014  performance  optimization 
july 2014 by handcoding
Script-injected "async scripts" considered harmful -
"The async attribute on the script tag provides two critical properties: it tells the browser to not block DOM construction, and it does not block script execution on CSSOM."
javascript  css  async  performance  optimization  2014  bestpractices 
may 2014 by handcoding
5 surprisingly painful things about client-side JS - The Sourcegraph Blog
"Single-page JavaScript frameworks aren’t a good fit for every site. Sourcegraph is primarily a content site, and we've discovered that for us the benefits of a rich JavaScript app don't outweigh the costs. The benefits are well known; here are some of the unexpectedly difficult things we experienced along the way. We hope this is helpful to other developers who are facing a similar decision."
angularjs  javascript  performance  2014  ember 
february 2014 by handcoding
Preventing 'layout thrashing' | Wilson Page
"FastDom harmonises DOM interactions by taking read and write jobs and batching them (reads then writes) on the next frame. This means you can build app components in isolation without worrying how they will affect (or be affected) by other components in the app."
javascript  2013  reflow  dom  performance  optimization 
october 2013 by handcoding
Feeding the Cloud: Prefetching resources to prime the browser cache for the next page
Via @mozhacks: "Prefetching resources to prime the browser cache for the next page."
markup  performance  opensource  prefetch  2012 
november 2012 by handcoding
How to tune Photoshop CS6 for peak performance « Jeff Tranberry's Digital Imaging Crawlspace
"This paper provides guidance on best practices to optimize Photoshop CS6 performance with a combination of careful hardware selection and informed program setup."
photoshop  performance  optimization  canonical  adobe  2012  software 
october 2012 by handcoding
Page Speed for Chrome, and in 40 languages! - The official Google Code blog
"Today we’re launching the most requested feature for Page Speed, Page Speed for Chrome. Now Google Chrome users can get Page Speed performance suggestions to make their sites faster, right inside the Chrome browser."
chrome  extensions  performance  optimization  2011  pagespeed 
march 2011 by handcoding
DataURLMaker | Sveinbjorn Thordarson
"If you select an image file and submit the form below, you get a Data URL for the image."
dataurl  images  2011  performance  optimization 
january 2011 by handcoding
ImperialViolet - Overclocking SSL
"[...] If you stop reading now you only need to remember one thing: SSL/TLS is not computationally expensive any more." [June 2010]
ssl  security  performance  https  2010  http  google 
november 2010 by handcoding
Running scripts with async and defer in WebKit | Surfin’ Safari - Blog Archive
"Both async and defer scripts begin to download immediately without pausing the parser and both support an optional onload handler to address the common need to perform initialization which depends on the script. The difference between async and defer centers around when the script is executed. Each async script executes at the first opportunity after it is finished downloading and before the window’s load event. This means it’s possible (and likely) that async scripts are not executed in the order in which they occur in the page. The defer scripts, on the other hand, are guaranteed to be executed in the order they occur in the page. That execution starts after parsing is completely finished, but before the document’s DOMContentLoaded event."
javascript  bestpractices  2010  webkit  async  defer  html5  performance  optimization  firefox 
september 2010 by handcoding
Conditional comments block downloads / Stoyan's
"To give you a summary: turned out that any conditional comment, not only for an extra CSS, will block further downloads until the main CSS file arrives."
conditionalcomments  css  performance  optimization  2010  via:cgriego  ie 
may 2010 by handcoding
Apple's 15-inch Core i5 MacBook Pro: The One to Get? - AnandTech :: Your Source for Hardware Analysis and News
"While I don't believe there's much reason to go for the 2.53GHz over the 2.40GHz model [...], the Core i7 is actually pretty decent. For a 22% increase in total system cost you end up with 11 - 15% better performance in CPU bound applications."
macbookpro  comparison  i5  i7  2010  benchmarks  anandtech  apple  performance 
may 2010 by handcoding
Official Google Webmaster Central Blog: Using site speed in web search ranking
"Today we're including a new signal in our search ranking algorithms: site speed."
google  seo  optimization  performance  2010 
april 2010 by handcoding
John Resig - Fast JavaScript Max/Min
"I've been saving this technique for a while now - it's simple, but it's good. What's the fastest way to find the largest, or smallest, number in an array?"
jeresig  2007  javascript  arrays  max  min  performance 
february 2010 by handcoding
High Performance Web Sites :: 5a Missing schema double download
"Internet Explorer 7 & 8 will download stylesheets twice if the http(s) protocol is missing."
ie  ie7  ie8  performance  optimization  2010  stevesouders  http 
february 2010 by handcoding
NetExport | Software is hard
"NetExport is a Firebug 1.5 extension that allows exporting all collected and computed data from the Net panel. The structure of the created file uses HTTP Archive 1.1 (HAR) format (based on JSON)."
firebug  2010  firefox  plugins  performance  http  export  net 
january 2010 by handcoding
Performance / Price for CPUs
"This site simply takes the data from, fetches the current prices from and makes a nice table."
cpu  hardware  performance  comparison  2010 
january 2010 by handcoding
Top PNG Optimizers Don’t Use zlib « Lickity Split
"Oleg Kikin has an interesting chart comparing the performance multiple different PNG optimizing tools. [...] PNGOut and AdvanceCOMP produce the smallest PNGs because they use custom DEFLATE compressors that achieve better compression than zlib’s implementation."
png  images  optimization  performance  compression  2010  comparison  pngout 
january 2010 by handcoding
What's the Fastest Way to Code a Loop in JavaScript? - Greg Reimer's Weblog
"I built a loop benchmarking test suite for different ways of coding loops in JavaScript. There are a few of these out there already, but I didn't find any that acknowledged the difference between native arrays and HTML collections."
javascript  performance  optimization  for  2009  loops  benchmarks  2008  while 
december 2009 by handcoding
Photoshoptimize - Optimize Photoshop Performance
"We designers are always looking for ways to improve the performance of Photoshop. Here’s a compiled list of the best tips found on the internet for optimizing the overall performance of this application." (via:
photoshop  performance  optimization  settings  2009  software  osx  mac  photography 
december 2009 by handcoding
Macintosh Performance Guide: Mac OS X 10.6 Snow Leopard — Performance
"Snow Leopard booted into the 64-bit kernel shows a consistent performance advantage [in photography-related apps] over Leopard, and even more advantage over 32-bit Snow Leopard as well."
photography  2009  snowleopard  mac  osx  64bit  performance  software 
december 2009 by handcoding
Namebench -- Open-source DNS Benchmark Utility | Project Hosting on Google Code
"namebench hunts down the fastest DNS servers available for your computer to use. namebench runs a fair and thorough benchmark using your web browser history, tcpdump output, or standardized datasets in order to provide an individualized recommendation."
dns  benchmarks  comparison  networking  performance  google  software  opensource  osx  mac  2009 
december 2009 by handcoding
Home - Browserscope
"Browserscope is a community-driven project for profiling web browsers. The goals are to foster innovation by tracking browser functionality and to be a resource for web developers." (This is based, in part, off the UA Profiler tests created by Steve Souders.)
testing  performance  comparison  2009  browsers  via:souders  canonical 
november 2009 by handcoding
jwz - Dear Palm, it's just not working out.
"Today I wiped my Palm Pre and bought an iPhone. Believe it or not, this actually has nothing to do with my utterly nightmarish experience of trying to get my applications into Palm's app catalog, and everything to do with the fact that the phone is just a constant pain to use."
palmpre  palm  iphone  comparison  2009  via:daringfireball  jwz  performance  pre 
october 2009 by handcoding
Profiling code performance - Aptana
This page goes over the various profiling functionality within Firebug.
firebug  optimization  performance  2009  firefox  profile  tutorials 
october 2009 by handcoding
Twitter / Chris Griego: Today I learned that node. ...
"Today I learned that node.parentNode.replaceChild(node.cloneNode(false), node) is much, much faster than node.innerHTML=''." (If you should need to do such a thing, this could come in handy.)
via:cgriego  2009  javascript  domscripting  innerhtml  clonenode  removenode  performance  optimization 
october 2009 by handcoding
Optimize performance in Photoshop CS4 on Mac OS | Adobe
"The performance of Adobe Photoshop CS4 is affected most by available random-access memory (RAM) and computer processor speed. Other factors can also affect performance, such as the options you select, your workflow, and your operating system and hardware configuration." (In some ways, this is a more in-depth version of )
photoshop  performance  optimization  2009  via:daringfireball  canonical 
september 2009 by handcoding - Firefox 3 beta 5 will have improved connection parallelism
"Just like IE8 increase from 2 concurrent connections per host to 6, Mozilla Firefox will also increase it to 6." (This page goes over the new connection-related limits in Firefox 3.)
ie8  ie  firefox  firefox3.5  http  requests  performance  optimization  2009 
august 2009 by handcoding
Make Photoshop Faster
This page by @danrubin suggests two settings changes that apparently could make Photoshop run faster. (The second of the two tips, disabling Image Previews, might turn off an otherwise-handy feature, though.)
photoshop  settings  via:danrubin  2009  software  performance  imagepreviews  cachelevels  caching 
august 2009 by handcoding
Slow Photoshop? A solution. | Hoefler & Frere-Jones
via @cameronmoll: "Possible fix for Photoshop slowness: delete com.adobe.Photoshop.plist & com.adobe.mediabrowser.plist" [Apparently, Photoshop searches one's connected drives in certain scenarios.] (via:
photoshop  performance  via:cameronmoll  2009 
july 2009 by handcoding
Let's make the web faster - Google Code
"There are plenty of ways to make websites run faster. In this section, you can discover performance best practices that real web professionals employ in their everyday work. These practices have improved the user experience for millions of users and we hope they are going to be useful for other web developers." (This is a pretty dang comprehensive list. Lots of good stuff here.)
video  2009  javascript  css  presentations  optimization  google  performance  canonical  via:ia 
june 2009 by handcoding
3G vs. 3G S App Launching Times on Flickr - Photo Sharing!
This short video demonstrates the app-loading times between the iPhone 3G and the iPhone 3Gs.
video  2009  iphone  comparison  flickr  performance  iphone3gs 
june 2009 by handcoding
High Performance Web Sites :: Stanford videos available
"Yep, 25 hours of me talking about web performance! These videos include lectures on all the rules from my first book, High Performance Web Sites, as well as the new material from my next book, Even Faster Web Sites, due out in June"
video  2009  to-watch  javascript  css  optimization  performance  httprequests  stevesaunders 
may 2009 by handcoding
High Performance Web Sites: Rule 13 – Configure ETags (Yahoo! Developer Network Blog)
"I agree with the comments above that YSlow's "F" for using ETags at all is suspect. Using 'FileETag MTime Size'
in Apache sufficiently shelters ETag calculation from the host-specific inode differences."
2009  http  optimization  apache  yahoo  performance  etags 
april 2009 by handcoding
IEBlog : IE8 Performance
This post goes over some of the performance-related improvements in IE8, including JavaScript improvements, a reduction in memory leaks, and support for data URIs.
2008  javascript  ie  optimization  ie8  performance  datauris 
january 2009 by handcoding
UA Profiler
"UA Profiler is a community-driven project for gathering browser performance characteristics (parallel connections, caching, etc.)."
browsers  performance  optimization  webkit  firefox  gecko  ie  javascript  css  2008  opera  chrome  safari  testing  networking 
october 2008 by handcoding
HttpWatch: An HTTP Viewer and HTTP Sniffer for IE and Firefox
"HttpWatch is an HTTP viewer and debugger that integrates with IE and Firefox to provide seamless HTTP and HTTPS monitoring without leaving the browser window."
http  optimization  performance  software  windows  ie  firefox  via:cgriego  2008 
october 2008 by handcoding
HttpFox :: Firefox Add-ons
"HttpFox monitors and analyzes all incoming and outgoing HTTP traffic between the browser and the web servers."
extensions  firefox  http  2008  via:cgriego  performance  optimization 
july 2008 by handcoding
John Resig - Deep Profiling jQuery Apps
"I've come up with a plugin that you can inject into a jQuery site that you own and see how the performance breaks down method-by-method."
jquery  javascript  domscripting  optimization  performance  2008 
june 2008 by handcoding
AJAX Libraries API - Google Code
"By using the Google AJAX API Loader's google.load() method, your application has high speed, globaly available access to a growing list of the most popular JavaScript open source libraries"
javascript  domscripting  jquery  prototype  scriptaculous  2008  google  performance  optimization 
may 2008 by handcoding
JScript Blog : Performance issues with "String Concatenation" in JScript.
Looks like the IE team is finally getting around to fixing the poor string concatenation performance that's plagued IE for a while.
ie  javascript  concatenation  performance  strings 
february 2008 by handcoding
Running CPU Intensive JavaScript Computations in a Web Browser | Julien Lecomte’s Blog
"Fortunately, the setTimeout method of the global object allows us to execute code on a delay, giving the browser a chance to handle events and update the user interface [...]"
javascript  performance  cpu  threading  settimeout 
october 2007 by handcoding
Dean Edwards: Firebug and javascript.options.strict
Firefox may render some pages slowly if Firebug is enabled and the about:config entry "javascript.options.strict" is set to true. Edwards recommends testing one's own code with that option enabled.
javascript  firebug  firefox  performance  optimization  aboutconfig 
october 2007 by handcoding
BMW USA offering factory performance parts, with full warranty - Autoblog
"Beginning with the 3-series and Z4, BMW is offering a host of components, from brake upgrades to engine kits, that will boost performance and not cause owners to fear a trip to the dealer for service."
bmw  cars  upgrades  performance 
september 2007 by handcoding
SlickSpeed Speed/Validity Selectors Test for JavaScript Frameworks.
"Every framework runs in his own iFrame, thus no conflicts can happen. Tests are run selector by selector, with an interval to prevent the browser from freeezing." [This page compares Prototype, jQuery, MooTools, ext, and cssQuery.]
javascript  performance  mootools  jquery  prototype  benchmarks  comparison  ext  via:cgriego 
june 2007 by handcoding
IEBlog : IE + JavaScript Performance Recommendations - Part 1
"While investigating the performance issues on script heavy sites we noticed several design patterns that resulted in less than optimal script performance. Changing these design patterns on the site end often resulted in huge performance wins (4x to 10x
javascript  performance  optimization  ie  domscripting 
november 2006 by handcoding
Sylvain Zimmer - Speeding up Prototype's $$ Selector
"Prototype’s current code [for $$] is quite elegant (as always!) but very slow, so I wrote an add-on that makes this function up to 20 times faster in most usual cases (tested on IE6, Firefox 1.5 and Opera). "
prototype  scriptaculous  javascript  domscripting  performance  optimization 
july 2006 by handcoding
JavaScript Performance Tests
"The tables on this page display the performance of common browsers for some more or less basic JavaScript operations. The displayed results are average values of 969 different systems on which the tests were run."
javascript  performance  optimization 
june 2006 by handcoding
JavaScript Optimization Strategies and FAQS
"We show you how to speed up JavaScript programs and sites, avoid the 'great speed offenders'. say 'no' to bad programing habits."
javascript  domscripting  optimization  performance 
april 2006 by handcoding
Optimizing JavaScript for Execution Speed
"Algorithms and data structures, caching frequently used values, loop unrolling and hoisting, removing tail recursion, and strength-reduction techniques all have a place in your JavaScript optimization toolbox."
javascript  optimization  domscripting  performance 
april 2006 by handcoding
How do I use the Code Profiling feature? | Venkman 0.9.x Frequently Asked Questions
"Profile can be used to measure execution times for your scripts. [...] While Profiling is enabled, Venkman will collect call count, maximum call duration, minimum call duration, and total call duration for every function called. "
javascript  domscripting  performance  optimizations  firefox  venkman 
april 2006 by handcoding
Duff's Device Tests for faster loops - JavaScript Optimization and Performance Tuning II
"Duff's Device generalizes the loop unrolling process. You can unroll loops to your heart's content using this technique, without knowing the number of iterations beforehand. The original algorithm combined a do-while and a switch statement."
javascript  performance  optimization  domscripting 
april 2006 by handcoding
Javascript String Concatenation - Software Secret Weapons
This article compares string concatenation to array-joining in JavaScript. The result: array-joining wins. Also included is a StringBuffer implementation to facilitate string combining without concatenation.
javascript  domscripting  strings  optimization  performance  concatenation  stringbuffer 
april 2006 by handcoding
Javascript - Benchmark - W3C DOM vs. innerHTML
""This is a test page intended to find out which method of generating large amounts of content is fastest in the browsers. [...] Each of the test scripts creates a 50x50 table, all of whose cells are filled with one character, *."
javascript  optimization  innerhtml  domscripting  dom  performance 
april 2006 by handcoding
Firefox Tuning - MozillaZine Forums
"The purpose of this thread is to collect and discuss various tuning options for Gecko based browsers and correct some of the more obvious mistakes in several tweak collections that are circulating on the web."
firefox  mozilla  prefs  tweaks  performance 
july 2005 by handcoding
windows xp services list
This page has a comprehensive list of services on Windows XP, what they do, and if they can be disabled.
windowsxp  services  performance  windows 
july 2005 by handcoding
Performance Boosting XP
This fellow offers various tweaks for Windows XP which make use of machines with large amounts of RAM. The trade off is memory-use vs speed, but if you have lots of RAM, why not? :)
windowsxp  registry  tweaks  performance  ram  memory 
july 2005 by handcoding

Copy this bookmark:

to read