Skip to content

Conversation

@jessesquires
Copy link
Owner

@jessesquires jessesquires commented Oct 10, 2020

[workflow] add markdown link checker

Repository owner deleted a comment from hal-codebot Oct 10, 2020
Repository owner deleted a comment from hal-codebot Oct 11, 2020
Repository owner deleted a comment from hal-codebot Oct 11, 2020
@jessesquires jessesquires mentioned this pull request Oct 11, 2020
@hal-codebot
Copy link
Collaborator

Proselint found issues

_posts/2014-06-25-apples-to-apples.md

Line Message Severity
6 Minimize your use of corporate catchphrases like this one. warning
11 Months should be capitalized. 'June' is the preferred form. warning
207 More than 30 ppm of exclamations. Keep them under control. warning
234 'Hopefully' is a bit of a skunked term — impossible to use without issue. Find some other way to say it. warning

_posts/2014-08-06-apples-to-apples-part-two.md

Line Message Severity
6 Minimize your use of corporate catchphrases like this one. warning
16 Minimize your use of corporate catchphrases like this one. warning
88 Days of the week should be capitalized. 'Friday' is the preferred form. warning
188 More than 30 ppm of exclamations. Keep them under control. warning
248 Minimize your use of corporate catchphrases like this one. warning

_posts/2014-08-19-on-the-value-of-benchmarks.md

Line Message Severity
10 Minimize your use of corporate catchphrases like this one. warning
14 No paragraph should start with a 'But'. warning
19 'with regard to' is commercialese. warning

_posts/2014-08-21-apples-to-apples-part-three.md

Line Message Severity
6 Minimize your use of corporate catchphrases like this one. warning
14 Minimize your use of corporate catchphrases like this one. warning
138 'with regard to' is commercialese. warning

_posts/2014-10-22-swift-failable-initializers.md

Line Message Severity
81 'hopefully' is a bit of a skunked term — impossible to use without issue. Find some other way to say it. warning

_posts/2014-12-08-introducing-jsqmessagesvc-6-0.md

Line Message Severity
26 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. Found 6 times elsewhere. warning
48 'easier said than done,' is a cliché. warning
48 'easier said than done,' is a cliché. warning
48 Needless variant. 'extendable' is the preferred form. warning
82 'Hopefully,' is a bit of a skunked term — impossible to use without issue. Find some other way to say it. warning
82 Redundancy. Use 'same' instead of 'exact same'. warning
94 'Needless to say,' is a cliché. warning

_posts/2015-01-05-swift-coredata-and-testing.md

Line Message Severity
33 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. Found 3 times elsewhere. warning
37 No hyphen is necessary in phrasal adjectives with an adverb ending in -ly, unless the -ly adverb is part of a longer phrase warning
94 'Back to the drawing board.' is a cliché. warning
94 Minimize your use of corporate catchphrases like this one. warning

_posts/2015-02-17-better-coredata-models-in-swift.md

Line Message Severity
71 'hopefully' is a bit of a skunked term — impossible to use without issue. Find some other way to say it. warning
93 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. warning
183 Redundancy. Use 'free' instead of 'for free'. warning
183 'for free' is cliché. warning

_posts/2015-03-31-functional-notifications.md

Line Message Severity
10 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. warning
135 'deceptively' is a bit of a skunked term — impossible to use without issue. Find some other way to say it. warning

_posts/2015-07-19-swift-namespaced-constants.md

Line Message Severity
11 Days of the week should be capitalized. 'Friday' is the preferred form. warning
16 More than 30 ppm of exclamations. Keep them under control. warning
31 No hyphen is necessary in phrasal adjectives with an adverb ending in -ly, unless the -ly adverb is part of a longer phrase warning
55 Hedging. Just say it. warning
83 '(hopefully)' is a bit of a skunked term — impossible to use without issue. Find some other way to say it. warning
87 'with regard to' is commercialese. warning

_posts/2015-07-26-swift-enumerations-and-equatable.md

Line Message Severity
15 Redundancy. Use 'free' instead of 'for free'. warning
15 'for free' is cliché. warning
56 No hyphen is necessary in phrasal adjectives with an adverb ending in -ly, unless the -ly adverb is part of a longer phrase warning
70 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. warning

_posts/2015-10-14-UIKit-changes-in-iOS-9.md

Line Message Severity
16 Days of the week should be capitalized. 'Friday' is the preferred form. warning
22 'playing with fire.' is a cliché. warning
24 'Playing with fire' is a cliché. warning
44 Days of the week should be capitalized. 'Friday' is the preferred form. warning

_posts/2015-10-25-building-data-sources-in-swift.md

Line Message Severity
16 'time and time again.' is a cliché. warning
99 More than 30 ppm of exclamations. Keep them under control. warning
107 'hopefully' is a bit of a skunked term — impossible to use without issue. Find some other way to say it. warning

_posts/2015-12-06-swift-open-source.md

Line Message Severity
24 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. Found 4 times elsewhere. warning
36 More than 30 ppm of exclamations. Keep them under control. warning
40 With lowercase letters, the periods are standard. warning
40 It's standard to put a space before 'a.m.' or 'p.m.'. warning

_posts/2015-12-10-open-source-swift-weekly-1.md

Line Message Severity
10 More than 30 ppm of exclamations. Keep them under control. warning
20 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. warning
24 Annotation left in text. warning

_posts/2015-12-17-open-source-swift-weekly-2.md

Line Message Severity
10 More than 30 ppm of exclamations. Keep them under control. warning
54 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. warning
54 Comparison of an uncomparable: 'least only ' is not comparable. warning
54 Inconsistent spacing after period (1 vs. 2 spaces). warning

_posts/2015-12-24-open-source-swift-weekly-3.md

Line Message Severity
10 More than 30 ppm of exclamations. Keep them under control. warning
30 Needless variant. 'extendable' is the preferred form. warning

_posts/2016-01-07-open-source-swift-weekly-4.md

Line Message Severity
10 More than 30 ppm of exclamations. Keep them under control. warning

_posts/2016-02-06-jsqmessages-call-for-contributors.md

Line Message Severity
7 More than 30 ppm of exclamations. Keep them under control. warning

_posts/2016-02-19-swifty-presenters.md

Line Message Severity
16 More than 30 ppm of exclamations. Keep them under control. warning

_posts/2016-03-21-contributing-to-swift.md

Line Message Severity
7 More than 30 ppm of exclamations. Keep them under control. warning

_posts/2016-05-20-swift-documentation.md

Line Message Severity
85 Redundancy. Use 'free' instead of 'for free.'. warning
85 'for free.' is cliché. warning
87 No paragraph should start with a 'But'. warning
91 Redundancy. Use 'free' instead of 'for free,'. warning
91 'for free,' is cliché. warning

_posts/2016-05-22-open-source-everything.md

Line Message Severity
52 Annotation left in text. warning
52 Hyphenate 'open source community', a phrasal adjective, as 'open-source community'. warning
58 'Easier said than done' is a cliché. warning
58 'Easier said than done' is a cliché. warning
62 'easier said than done.' is a cliché. warning
62 'easier said than done.' is a cliché. warning

_posts/2016-06-04-avoiding-objc-in-swift.md

Line Message Severity
96 No paragraph should start with a 'But'. warning

_posts/2016-07-31-enums-as-configs.md

Line Message Severity
10 Needless variant. 'extendable' is the preferred form. warning
88 More than 30 ppm of exclamations. Keep them under control. warning
216 Needless variant. 'extendable' is the preferred form. warning

_posts/2016-10-01-shipping-swift-3.md

Line Message Severity
10 More than 30 ppm of exclamations. Keep them under control. warning

_posts/2016-11-05-140-proposals-frenchkit-video.md

Line Message Severity
26 Hyphenate 'open source community,', a phrasal adjective, as 'open-source community'. warning

_posts/2017-01-16-testing-without-ocmock.md

Line Message Severity
16 More than 30 ppm of exclamations. Keep them under control. warning
63 No paragraph should start with a 'But'. warning

_posts/2017-02-10-refactoring-singletons-in-swift.md

Line Message Severity
138 'If and when' is a cliché. warning

_posts/2017-02-15-adapting-to-change-and-cutting-corners.md

Line Message Severity
18 '[start from scratch]' is a cliché. warning

_posts/2017-06-04-writing-better-singletons-in-swift.md

Line Message Severity
26 Redundancy. Use 'add' instead of 'add an additional'. warning

_posts/2017-07-16-officially-deprecating-jsqmessagesviewcontroller.md

Line Message Severity
45 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. warning
47 'off' is the preferred form. warning

_posts/2017-07-17-a-story-about-swift-source-compat.md

Line Message Severity
16 'few and far between,' is a cliché. warning

_posts/2017-09-10-building-a-site-with-jekyll-on-nfsn.md

Line Message Severity
8 'off' is the preferred form. warning
11 'off' is the preferred form. warning
11 'hopefully' is a bit of a skunked term — impossible to use without issue. Find some other way to say it. warning
34 Inconsistent spacing after period (1 vs. 2 spaces). warning
182 'off' is the preferred form. warning

_posts/2017-09-18-measuring-compile-times-xcode9.md

Line Message Severity
41 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. warning

_posts/2017-09-24-when-your-app-is-used-in-unexpected-ways.md

Line Message Severity
35 No hyphen is necessary in phrasal adjectives with an adverb ending in -ly, unless the -ly adverb is part of a longer phrase warning

_posts/2017-10-01-floating-point-swift-ulp-and-epsilon.md

Line Message Severity
303 Redundancy. Use 'skipped' instead of 'skipped over'. warning
303 'Hopefully' is a bit of a skunked term — impossible to use without issue. Find some other way to say it. warning

_posts/2017-12-28-swift-weekly-brief-hiatus.md

Line Message Severity
33 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. Found once elsewhere. warning
41 'First and foremost,' is cliché. warning
51 'off' is the preferred form. warning
51 More than 30 ppm of exclamations. Keep them under control. warning

_posts/2018-07-05-swifts-new-calling-convention.md

Line Message Severity
16 'if and when' is a cliché. warning

_posts/2018-07-29-swift-tip-building-arrays-with-compactmap.md

Line Message Severity
32 No paragraph should start with a 'But'. warning
84 Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be. Found once elsewhere. warning

Spell Checker found issues

README.md

Line Typo
1 # [jessesquires.com](https://www.jessesquires.com
11 ](https://getbootstrap.com), **jQuery,** and [Fo
11 /fontawesome.com). Hosted at [NearlyFreeSpeech](https://nearlyfreespeech.net
15 - **Bundler**
22 - **jekyll** ([Late
23 - [jekyll-sitemap](https://github.com/jekyll/je
24 - [jekyll-paginate](https://github.com/jekyll/je
35 - **jQuery** ([pkg](h
46 - [GoatCounter Analytics](https://www.goatco
46 - GoatCounter **Analytics**
97 > Copyright © 2014-present Jesse Squires.

_posts/2014-06-25-apples-to-apples.md

Line Typo
11 When Craig Federighi arrived at his presentation s
15 {% include updated_notice.html
16 update_message='
30 {% include blockquote.html
31 quote="And then Federighi said, let there be Swift; and
35 The third floor of Moscone West erupted with applause as
37 is still in beta (along with Xcode 6, iOS 8, and OS X 10.10), so
39 s a fun and interesting code **kata,** I deci
39 a.com), I decided to port my [objc-sorts](https://github.com/jessesqui
44 Mavericks 10.9.3 10.9.4, Xcode6-beta4 beta2 WWDC seed
44 .9.3~~ 10.9.4, Xcode6-beta4 **beta2** WWDC seed
45 * Hardware: 2008 unibody MacBook Pro, 2.4 Ghz Intel Co
45 * Hardware: 2008 unibody MacBook Pro, 2.4 Ghz Intel Core 2 Duo
45 2008 unibody MacBook Pro, 2.4 Ghz Intel Core 2 Duo, 8 GB 1067 M
51 wift's Array and Int. The APIs are language-specific too, fo
75 in seconds. The average case runtime complexity for each algorithm
199 on level for Swift and -Ofast, though faster, remove
199 tire app compiled with -Ofast. More on that below.</
214 no optimizations and -Ofast in Swift is stark. On
216 aster though. Std lib sort is 6.5x faster. Quick sort is 7.0x fa
216 is 6.5x faster. Quick sort is 7.0x faster. Heap sort is 10.4x fa
216 is 7.0x faster. Heap sort is 10.4x faster. Insertion sort is 16.
216 .4x faster. Insertion sort is 16.0x faster. Selection sort is 2.4
216 .0x faster. Selection sort is 2.47x faster.
218 3. Only with -Ofast do we begin to experie
218 ve-C is almost twice as fast (1.84x). However, when comparing Swi
220 e this (when not using -Ofast, see Table 1 and *Ta
220 dash; in debug Objective-C is 308.0x faster. I'm still puzzled by
222 algorithm to use based on the dataset. I suspect that we would see
222 orts perform best with larger datasets and/or with complex objects.
224 eeing different results here. Federighi noted that for complex object
224 ort, Objective-C performed at 2.8x and Swift performed at 3.9x,
224 t 2.8x and Swift performed at 3.9x, using Python as the baseline
224 using Python as the baseline (1.0x). It is not clear at this tim
230 es are regarding using -Ofast. They recommended the
230 mpile the module using -Ofast and link it to your ap
234 eleases updates for Swift and Xcode6-beta.**
238 ### Futher reading
241 w.splasmata.com/?p=2798) from Splasm Software
242 -7/collections.html) by Peter Steinberger, objc.io issue #7
242 s.html) by Peter Steinberger, objc.io issue #7

_posts/2014-08-06-apples-to-apples-part-two.md

Line Typo
14 ith the fifth beta release of Xcode 6, iOS 8, OS X Yosemite, and
36 in seconds. The average case runtime complexity for each algorithm
38 conds, then Swift is 3 times (3x) faster.
88 tantially better. But this is ok — since you will be shi
188 optimization level of -Ofast has been deprecated in
188 en deprecated in favor -Ounchecked. This renaming is a de
188 . Previously it read as, "Ooooh fast!", begging for misu
192 f not all, developers will be compliling their modules and apps at the

_posts/2014-08-19-on-the-value-of-benchmarks.md

Line Typo
14 echanisms of the behavior of Caenorhaditis elegans (i.e. the nematode w
14 he behavior of Caenorhaditis elegans (i.e. the nematode worm) by
14 r of Caenorhaditis elegans (i.e. the nematode worm) by [embedd
14 by [embedding a model of its connectome in a simplified body and envi
17 inform our decisions on which toolsets to use. Further, every app wi

_posts/2014-08-21-apples-to-apples-part-three.md

Line Typo
10 If you abandon your favorite runtime, forget about garbage collect
14 lcome this week's arrival of [Xcode 6 beta 6](https://developer.a
19 ware:* OS X Mavericks 10.9.4, Xcode 6 beta 6
20 * Hardware: 2008 unibody MacBook Pro, 2.4 Ghz Intel Co
20 * Hardware: 2008 unibody MacBook Pro, 2.4 Ghz Intel Core 2 Duo
20 2008 unibody MacBook Pro, 2.4 Ghz Intel Core 2 Duo, 8 GB 1067 M
22 tegers in the range [0, UINT32_MAX). Then, each sorting a
24 while C uses qsort() from [cstdlib](http://www.cplusplus.com/ref
28 onds, then Swift is 3 times (-3x) slower. Also note that the d
82 its slowest, Swift was still 6x faster than Objective-C, whic
138 e a choice with regard to our toolsets. Programming languages come i

_posts/2014-10-22-swift-failable-initializers.md

Line Typo
10 new feature in Swift 1.1 in [Xcode 6.1](https://developer.apple.
10 om/xcode/downloads/) — failable initializers.
10 downloads/) — failable initializers.
14 #### Failable initializers
14 #### Failable initializers
21 nil, with the exception of [optionals](https://developer.apple.com/
21 he syntactic difference for a failable initializer — from `ini
21 tic difference for a failable initializer — from init() to `ini
23 e should not be a need for a failable initializer. However, this i
23 ot be a need for a failable initializer. However, this is a great fea
23 ng so great. The problem with failable initializers is, ironically,
23 at. The problem with failable initializers is, ironically, nil. In Obj
23 o an array or a dictionary at runtime. We all loathe that embarassm
23 t runtime. We all loathe that embarassment. But Swift comes to the rescu
23 erally speaking, we must [use optionals with care](http://owensd.io/2
25 The issue with failable initializers in Swift is the
25 The issue with failable initializers in Swift is the same issue wi
27 #### Be failable, not fallible
29 ons" is the language's latest tagline, which is probably as frighte
29 Swift's best practices. Using failable initializers in Swift should
29 est practices. Using failable initializers in Swift should be done spari
33 However, failable initializers might seduce you
33 However, failable initializers might seduce you into doing s
60 g a non-optional image to our initializer.
79 constructing a UIImage, the initializer `init(named name: String) ->
79 n to dirty up this class with optionals.
81 and just plain shameful with failable initializers if we aren't car
81 plain shameful with failable initializers if we aren't careful. Imagine
83 #### A fallible place to be failable
85 e at the core of the problem: failable initializers misplace respons
85 core of the problem: failable initializers misplace responsibilities in
85 lace the point of failure. An initializer should construct an instance.
87 One great solution would be a validator class, `MyBetterPostValidator
87 ass would also not have a failable intializer, but instead it wo
87 also not have a failable intializer, but instead it would have a
91 Failable initializers do address some
91 Failable initializers do address some of our proble
91 ey introduce into our design. Failable initializers feel a lot like
91 uce into our design. Failable initializers feel a lot like Objective-C,
91 tage of Swift's new features (enums, tuples, generics, etc.) and
93 In a way, before failable initializers, Swift helped en
93 In a way, before failable initializers, Swift helped enforce the [SO

_posts/2014-12-08-introducing-jsqmessagesvc-6-0.md

Line Typo
24 It all began with **Hemoglobe,** an a
24 Hub](https://github.com) and [CocoaControls](https://www.cocoacontrols.co
26 **CocoaPods** was ju
26 /3) was opened that requested CocoaPod support and I received my [fi
26 wController/pull/4) to add a [podspec](http://guides.cocoapods.org/
34 tion view and has a number of customizable subviews and properties, whic
34 has a number of customizable subviews and properties, which are out
34 g diagram. The labels for the subviews in the diagram are the names
34 m are the names of the actual subview properties for a cell. See th
34 operties for a cell. See the [JSQMessagesCollectionViewCell](http://cocoadocs.org/docsets
36 {% include image.html
37 file="jsqmessages_cell_anatomy.jpg"
40 source_link=null
41 half_width=false
44 has three labels for message metadata — the sender, the date,
44 optional. Finally, there's a customizable margin (`messageBubbleLeftRig
44 layout object. Each of these subviews is customizable via the usual
44 ct. Each of these subviews is customizable via the usual [UIKit](https:/
44 s customizable via the usual [UIKit](https://developer.apple.com/
44 t/Reference/UIKit_Framework/) APIs. Now that we understand the b
48 one, and I've made plenty of [embarassing mistakes](https://github.com/
59 sage data (text or media) and metadata (sender, date, etc.)
70 ample, media data could be a [CLLocation](https://developer.apple.com/
70 tion_Class/index.html), or a [UIImage](https://developer.apple.com/
70 age_Class/index.html), or an [ABRecordRef](https://developer.apple.com/
72 {% include image.html
73 file="jsqmessages_media_type.jpg"
74 alt="JSQMessage Media Items"
76 source_link=null
77 half_width=false
82 message or media types as an [Enum](http://nshipster.com/ns_enum
82 rovided media types. Using an enum would litter the code base wi
82 of media. The only option for extensibilty would have been providing a "
82 ave been providing a "custom" enum case, such as `JSQMediaTypeCu
82 umer of the API. This special enum case further increases comple
90 y good state. It's stable and extensbile, but there's still plenty of
96 reat developers, I discovered CocoaPods, I've learned how to effectiv

_posts/2015-01-05-swift-coredata-and-testing.md

Line Typo
22 Because Swift classes are namespaced, you must prefix the class na
22 your .xcdatamodeld file in Xcode, selecting an entity, and ope
33 nerate the classes, otherwise Xcode will not create the classes p
37 ts into Core Data and avoid [stringly-typed Objective-C](http://corner.s
78 unction from the [Objective-C runtime library](https://developer.ap
78 ve always avoided using such [runtime](http://nshipster.com/associa
102 ames, like "Person", to the initializer
106 iteria above is a convenience initializer:
121 class function. In Swift, an initializer is guaranteed to return a non
123 to implement this convenience initializer and provide their own value f
123 his by moving the convenience initializer to a new extension and replac
123 ill-not-work) due to Swift's [initializer delegation and two-phase init
125 eventually be automated via [mogenerator](https://github.com/rentzsch/

_posts/2015-02-17-better-coredata-models-in-swift.md

Line Typo
16 ckily, we can harness Swift's optionals, enums, and other features to
16 an harness Swift's optionals, enums, and other features to make m
16 rawbacks and limitations with Xcode's current toolset.
16 itations with Xcode's current toolset.
20 ### A great case for optionals
22 html) in the community about [optionals](https://developer.apple.com/
26 g the .xcdatamodeld file in Xcode, then selecting the entity, t
26 pector in the sidebar. Or, at runtime you find out that your `NSMan
69 muted">Note: Xcode does not generate Swift class
71 the rest of your app. As with optionals in general, you will need to
71 pleasant if you have a lot of optionals. If this is the case, hopeful
71 hem to be dismissed before. Optionals complicate your model, whic
73 equired to have an address. Ahh, this is looking much better
93 rtype. In the depths of the **codebase,** there may be operations on
115 As noted in **objc.io,** *we can
183 y. On the bright side, we get optionals and type aliases for free &md
185 ctive-C. Here's to hoping the toolset will improve — and when

_posts/2015-03-31-functional-notifications.md

Line Typo
10 ation of this pattern is via [NSNotificationCenter](https://developer.apple.com/
10 r, the NSNotificationCenter APIs are kind of cumbersome to use
16 A while back, **objc.io** posted f
45 object (id) property and userInfo (NSDictionary) property. I
50 Say hello to [JSQNotificationObserverKit](https://github.com/jessesqui
50 it), there is only 1 class, 1 struct, and 1 function. This is all
52 eating a Notification. This struct has two type parameters: a va
87 r is set to nil (when it is deallocated), then it is removed from `NS
96 een resolved. Registering and unregistering for a notification is now as
100 oa notifications that send a userInfo dictionary? We can do it all
105 oes not send any data in the userInfo dictionary.
131 the unit tests included with [JSQNotificationObserverKit](https://github.com/jessesqui
135 so little — 1 class, 1 struct, and 1 function. An equivalen
135 l not type-safe. I think the [objc.io snippets](http://www.**objc.io**/
135 ro-libraries, check out Chris Eidhof's talk on [Tiny Networking](h

_posts/2015-04-06-swift-failable-initializers-revisited.md

Line Typo
10 ost, I discussed how Swift's [failable initializers](https://develop
10 scussed how Swift's [failable initializers](https://developer.apple.com/
10 fail. We should aim to avoid optionals as much as possible to reduce
10 sence of values. Recently, @danielgomezrico asked a great [question](ht
10 out a possible use case for a failable initializer — parsing J
10 sible use case for a failable initializer — parsing JSON. [Given]
16 del object. Should we write a failable initializer for this model th
16 t. Should we write a failable initializer for this model that receives
46 XML? Then we would need a new initializer, init?(xml: XML), and the m
54 st step is creating a generic validator object. We'll use a [phantom
54 ets/13.html) to ensure that a validator can only validate the JSON fo
54 e of model. We initialize the validator with a closure that receives
54 is saved as a property on the validator.
81 e us to construct many unique validators, while maintaining a single g
81 reate many different concrete validators (or validator subclasses) for
81 erent concrete validators (or validator subclasses) for many differen
81 safety and readability to the validator. We know that this validator
81 validator. We know that this validator is for MyModel instances.
83 new (more proper) designated initializer to MyModel that uses [depen
110 tinue. With this solution, no failable initializers are required.
110 th this solution, no failable initializers are required.
132 ided the problem into smaller subproblems and addressed each one indivi
132 ponents above — JSON, a validator, and a parser — and ret
154 Suffering from [angle-brack-T blindness](http://inessential
154 specifies the model type. The validator must be a validator for T,
154 type. The validator must be a validator for T, and the function ret
160 easily testable code, and no failable initializers. Of course there
160 estable code, and no failable initializers. Of course there will be situ
160 t be instantiated and using a failable initializer is perfect. In th
160 antiated and using a failable initializer is perfect. In this situation
162 ughtful design that will push optionals and failure states further to

_posts/2015-07-19-swift-namespaced-constants.md

Line Typo
11 stants-and-functions.html) on namespaced constants and functions in C.
11 xes. Although Swift types are namespaced by their module, we can still
15 {% include updated_notice.html
16 update_message='Inspired by this post, <a hr
16 a Swift source file based on Xcode assets. Checkout the repo <a
16 on Xcode assets. Checkout the repo <a href="https://github.com/l
16 utoAssets" class="alert-link">AutoAssets on GitHub. Thanks Lee!'
23 {% include image.html
24 file="tabbar.png"
27 source_link="https://developer.apple.com/
28 half_width=false
31 the past, we strove to avoid [stringly-typed](https://corner.squareup.com/
53 we are using the new [default enum naming](http://ericasadun.com
53 stuff-in-xcode-7-beta-3/) for enums with a string raw type. This
55 . But the goal here is proper namespacing, which makes our code easier
55 essentially in the UIImage namespace and I would argue that this f
55 a new type, we create our own namespace. We immediately know we are d
55 on UIImage — was it musicIcon and musicSelectedIcon, or
55 dash; was it musicIcon and musicSelectedIcon, or iconMusic and *iconMus
55 and musicSelectedIcon, or iconMusic and iconMusicSelected? Ins
55 tedIcon*, or iconMusic and iconMusicSelected? Instead, we can simply begi
59 be nice to be able to use an enum in this scenario, but an enum
59 enum in this scenario, but an enum raw value type must be a **va
59 r`. Alternatively, we can use structs and nested structs.
59 we can use structs and nested structs.
83 ars (hopefully). Using nested structs gives us our own namespace wi
83 sted structs gives us our own namespace with much richer semantics, a
87 ces in our apps: storyboards, xibs, or sound effects. You could
87 effects. You could even nest enums inside of structs, or enums i
87 uld even nest enums inside of structs, or enums inside of enums. So
87 t enums inside of structs, or enums inside of enums. So far, I've
87 f structs, or enums inside of enums. So far, I've found this patt
87 r, I've found this pattern of namespaced constants to be extremely use
91 what I have described, like [swiftrsrc](https://github.com/indragiek

_posts/2015-10-14-UIKit-changes-in-iOS-9.md

Line Typo
10 2). (Well, actually what [Max von Webel](https://twitter.com/34
10 (Well, actually what [Max von Webel](https://twitter.com/343max/s
10 There's a hidden gem in the [UIKit diffs](https://developer.appl
18 when the pointed-to object is deallocated, the pointer is zeroed out or
26 matter? Because up to iOS 9, UIKit views that have a delegate
40 this extends well beyond UITableView and UICollectionView. UIBarBu
40 s well beyond UITableView and UICollectionView. UIBarButtonItem.target is as
40 bleView and UICollectionView. UIBarButtonItem.target is assign. UIGestureRecognize
40 rButtonItem.target is assign. UIGestureRecognizer.delegate is assign. UIActionSheet.dele
40 ecognizer.delegate is assign. UIActionSheet.delegate is assign. UIAccelerometer.de
40 tionSheet.delegate is assign. UIAccelerometer.delegate is assign. The list goes on,
40 e list goes on, everywhere in UIKit.
42 urceordelegate` object is deallocated before the view, and then t
46 >You're correct that __unsafe_unretained is the same as a regular assi
46 ers in a window controller's -dealloc. It's almost unheard of. And
50 of iOS 9, the aforementioned APIs have changed. In fact, all of
50 have changed. In fact, all of UIKit looks like it [has been audit
64 s. Swift was the impetus for [nullability annotations](https://develope

_posts/2015-10-25-building-data-sources-in-swift.md

Line Typo
10 iewandUITableView`. These APIs make it simple to build inter
10 h which we can approach these APIs and reimagine how we use them
10 e can approach these APIs and reimagine how we use them to build apps
16 — re-implementing the [UITableViewDataSource](https://developer.apple.com/
16 /UITableViewDataSource) and [UICollectionViewDataSource](https://developer.apple.com/
20 d just recently updated) was [JSQDataSourcesKit](https://github.com/jessesqui
20 hese issues. Inspired by Andy Matuschak's [gist](https://gist.github.co
32 ctionandTableViewSection` structs. However, they conform to the
35 yandTableViewCellFactory**structs,** which conform to theCollec
37 ods from Objective-C classes (i.e., NSObject subclasses) to pu
103 ntegrates with Core Data and [NSFetchedResultsController](https://developer.apple.com/
103 /tree/develop/Example) in the repo that exercises all functional
107 n Swift, I encourage you try [JSQDataSourcesKit](https://github.com/jessesqui

_posts/2015-12-06-swift-open-source.md

Line Typo
24 Swift going to be dumped on [opensource.apple.com](http://www.opensource.apple.
24 uld it be put on GitHub like [ResearchKit](https://github.com/ResearchK
24 thing you need to know is on **Swift.org.**
30 - Chris Lattner's [first commit](https://github
32 - The main [Swift repo](https://github.com/apple/swi
34 ll requests across all of the repos. Many of them accepted and me
36 tions and more — [Chris Lattner](https://twitter.com/clattner
36 tter.com/clattner_llvm), [Joe Groff](https://twitter.com/jckarter
40 - Chris Lattner is [merging pull requests](ht
40 .com/swiftlang/swift/pull/166) at 10pm on Saturday.
44 ift 3.0. And thanks to [Erica Sadun](https://twitter.com/ericasad
46 - Chris Lattner [commits](https://github.com/
48 wift-compiler-crashes) from [@practicalswift](https://twitter.com/practica
48 lswift) has been [part of the repo](https://github.com/apple/swi
52 - [Jacob Bandes-Storch](https://twitter.com/jtbandes
56 - Much of the [swift-corelibs-foundation](https://github.com/apple/swi
58 - The [initial checkin](https://github.com/apple/swi
58 imported from an internal SVN repo. "Swift SVN r4". You will not
58 internal SVN repo. "Swift SVN r4". You will notice the followi
58 is source file is part of the Swift.org open source project. Copyrigh
63 ed in only three days. As Lattner says, *the revolution will be

_posts/2015-12-10-open-source-swift-weekly-1.md

Line Typo
14 ### This week on Swift.org
16 - [Manav Gabhawala](https://twitter.co
16 - [Manav Gabhawala](https://twitter.com/ManavGab
16 tion/pull/37) to add implicit initializers to Swift. In particular, this
18 - [Alex Denisov](https://twitter.com/1101_deb
22 - Chris Lattner tends to [fix](https://github
24 - [Brian Gesiak](https://twitter.com/modocach
24 tml) after noticing that the [xctest](https://github.com/apple/swi
34 - Andrew **Naylor** am
34 rgon) ambitiously implements [NSJSONSerialization](https://github.com/apple/swi
36 - [Jacob Bandes-Storch](https://twitter.com/jtbandes
36 tly improve the bridging of C APIs.
38 that discourages or prevents subclassing is [fine by me](https://twitt
40 he Swift Programming Language iBook (ePub) is available for *dire
40 t Programming Language iBook (ePub) is available for *direct dow
40 able for direct download on Swift.org (instead of only the iBook St
40 wift.org (instead of only the iBook Store) and is now under a [Cr
42 674254974629502976) for Chris Lattner.

_posts/2015-12-17-open-source-swift-weekly-2.md

Line Typo
10 The Swift.org community is finishing up its
16 Craig Federighi reflects on Swift's first wee
16 eek out in the open with John Gruber on [The Talk Show](http://dar
18 It looks like @**zhuowei**
24 [Slava Pestov](https://github.com/sl
24 [Slava Pestov](https://github.com/slavapest
26 Dominique **d'Argent** i
26 nubbel) introduced the first [unicode variable name](https://github
26 l happily buy a ☕ or &#x1F37A; for anyone who can successfu
26 ge a pull request that uses &#x1F4A9;.
28 [Bill Abt](https://github.com/apple/swi
28 ft and the core libraries! As Federighi mentioned on The Talk Show, I
30 Chris Lattner [fixed](https://github.com/app
32 Daniel **Duan** su
34 [@practicalswift](https://twitter.com/practica
36 com/swiftlang/swift/pull/439) for ARMv7 hosts such as the Raspberry P
36 sts such as the Raspberry Pi, BeagleBone, and Nvidia Tegras.
36 Raspberry Pi, BeagleBone, and Nvidia Tegras.
36 ry Pi, BeagleBone, and Nvidia Tegras.
38 Brian Gesiak [continued to pursue](https:/
38 s-xctest/pull/14) testing the XCTest framework, and in terms of nu
38 ctest/graphs/contributors) on corelibs-xctest.
42 ) and say thank you to [Erica Sadun](https://twitter.com/ericasad
44 s://github.com/ddunbar), and [Mattt Thompson](https://github.com/
46 Max Moiseev's [proposal](https://github.com
50 Erica Sadun also has a [great post](http:
54 c method dispatch. From Chris Lattner: *"TL;DR: What I’m really get
56 Fabian Ehrentraud started a [discussion](https:
56 ting Objective-C code without nullability attributes. Currently, un-ann
56 bility attributes. Currently, un-annotated Objective-C members are bridg
56 Swift as implicitly unwrapped optionals (e.g., view!). This proposa
56 plicitly unwrapped optionals (e.g., view!). This proposal sugg
56 ts importing these members as optionals (view?) instead, which woul
56 sure why implicitly unwrapped optionals exist to begin with, as they
58 Colin Cornaby [suggested](https://lists.swi

_posts/2015-12-24-open-source-swift-weekly-3.md

Line Typo
10 221/000540.html) for a bit on Swift.org. I have been traveling for the
16 @**tienex** s
16 ple/swift/pull/608) for Linux/armv7 support.
18 [@practicalswift](https://github.com/practical
20 [@masters3d](https://github.com/masters3d
22 Doug Gregor [implemented SE-0001](https:/
22 Doug Gregor [implemented SE-0001](https://github.com/apple/swi
26 Oisin Kidney's [proposal (SE-0008)](https://github.com/apple/sw
26 or-optionals.md), Add a Lazy flatMap for Sequences of Optionals,
26 Lazy flatMap for Sequences of Optionals,* has been [accepted](https:/
28 Kevin Ballard's [proposal (SE-0015)](https://github.com/apple/sw
30 Joe Groff submitted [a proposal](https:
30 wift has some special-purpose hardcoded behaviors, for example,lazy
30 mple behaviors include: lazy, memoization, delayed initialization, rese
34 Andyy Hope started [a discussion](h
34 allValues` static variable to enums, which would return an array
34 an array of all cases in the enum. Looks like there is a lot of
34 t for the idea so far. [Jacob Bandes-Storch](https://lists.swift.org/pipe
36 e I should go ahead and setup swiftweekly.org?

_posts/2016-01-07-open-source-swift-weekly-4.md

Line Typo
10 e started to pick up again on Swift.org. If you are following any of t
10 you are following any of the repos on GitHub, you have probably
10 this week I just discovered [SwiftExperimental.swift](https://github.com/apple/swi
10 it defines a bunch of custom unicode operators for Set. It's rea
10 ool. I would love to see more APIs like this in the standard lib
16 [Austin Zheng](https://github.com/austinzhe
18 Andrew **Naylor** me
18 ) to speed up JSON parsing in corelibs-foundation. We all know how much the Swi
20 the Swift package manager to corelibs-xctest.
22 Chris Lattner completely [redesigned](https
26 initialization.md) to improve memberwise initializers is now [under re
26 ion.md) to improve memberwise initializers is now [under review](https:/
26 2016-January/000010.html). As Lattner [pointed out](https://lists.s
26 deficiencies with the current memeberwise initializer behavior in Swift
26 with the current memeberwise initializer behavior in Swift. I have a g
30 Doug Gregor has submitted a [proposal](ht
34 Doug Gregor [notes](https://lists.swift.o
34 ot exposed to the Objective-C runtime. Luckily, I haven't run into

_posts/2016-01-14-new-weekly-brief.md

Line Typo
10 o be originally published at [swiftweekly.github.io](http://swiftweekly.github.io
16 p](http://getbootstrap.com), **jQuery,** and [Fon
20 e thing I always liked about **NSHipster** and [o
20 r](http://nshipster.com) and **objc.io**

_posts/2016-02-06-jsqmessages-call-for-contributors.md

Line Typo
10 ontributing to a widely used, impactful project? Then I have a propos
10 ontributors to help maintain [JSQMessagesViewController](https://github.com/jessesqui
18 ve as fast as I would like. JSQMessages is not being abandoned. But
22 some way*. You might even use JSQMessages. Working on this library will
29 * There's a nice [roadmap](https://github.com/jessesqui

_posts/2016-02-19-swifty-presenters.md

Line Typo
16 -language/events/227833264/)) meetup. A [video of the talk](https:
22 azing job with these posts! &#x1F64C;
24 res ideas for making it more swifty. It isn't too technical, but
24 sn't too technical, but these APIs are really interesting to me
24 evelopers could utilize these APIs, they instead opt for view co
26 ) in a new framework — [PresenterKit](https://github.com/jessesqui
26 when it is I will push it to **CocoaPods.** Mean
28 /twitter.com/jesse_squires) &#x1F600;
32 > One major shortcoming of UIKit is that view controllers have
32 common operations with a more Swifty API that reduces boilerplate

_posts/2016-03-21-contributing-to-swift.md

Line Typo
22 kers presented in Japanese! &#x1F60E; The speakers met with the tr
22 ge barrier. It was awesome. &#x1F389;
24 /twitter.com/jesse_squires) &#x1F604;
26 ) of the talk is excellent. &#x1F64C;

_posts/2016-05-20-swift-documentation.md

Line Typo
21 {% include updated_notice.html
22 update_message='After reading this, be sure
33 these common attributes. See [Alamofire](https://github.com/Alamofire
33 ub.com/Alamofire/Alamofire), **CocoaPods,** and
33 (https://cocoapods.org), and [JSQMessagesViewController](https://github.com/jessesqui
39 parameter values? Search for APIs that are similar to the ones
41 Here's an example from [JSQMessagesViewController](http://cocoadocs.org/docsets
55 follows the precedent set by UIKit, not only in terms of the API
57 ally. It might even be fun! &#x1F609;
61 thub.com/onevcat)'s plug-in, [VVDocumenter-Xcode](https://github.com/onevcat/V
61 cat/VVDocumenter-Xcode). This Xcode plug-in will generate the doc
67 urce tools, maintained by JP **Simard** an
67 github.com/jpsim) and [Samuel Giddins](https://github.com/segiddins
69 , but here's an example from [PresenterKit](https://github.com/jessesqui
85 istributing your library with CocoaPods, then you'll get [CocoaDocs](
85 h CocoaPods, then you'll get **CocoaDocs** for fr
85 oadocs.org) for free. Thanks **Orta!** N
85 /twitter.com/orta)! Note that CocoaDocs uses jazzy for Swift pods.
87 ) or projects that do not use CocoaPods you'll need another solution.
87 t named gh-pages, push some html or markdown using [Jekyll](ht
91 ted">Note: Even though CocoaDocs provides docs for free, I sti
91 his. One small shortcoming of CocoaDocs is the inability to update do
91 se. Suppose you release v1.0 of your library and th
91 your documentation. To update CocoaDocs, you'll need to push another
91 sh another version, say v1.0.1, to CocoaPods. In any
91 , say v1.0.1, to CocoaPods. In any case, it's nice to ha
91 rs your library via GitHub or CocoaPods, the docs are right there.</p
95 l of my libraries. We'll use [JSQCoreDataKit](https://github.com/jessesqui
99 he library, an example app, a readme, and other supporting files l
100 - The [gh-pages](https://github.com/jessesqui
104 On my machine I checkout the repo twice. One checkout for bot
104 t for both the develop and gh-pages branches.
107 DataKit` is the checkout for gh-pages
109 se a lot of churn, since the gh-pages branch doesn't contain the l
111 #### Submodules
113 t all comes together. On the gh-pages branch, I add the develop
113 anch of the library as a [git submodule](https://git-scm.com/book/en/
113 git submodule update, the gh-pages branch can pull in the libra
113 om the root directory of the gh-pages checkout and provide the sub
113 ges* checkout and provide the submodule directory as the `--source-di
117 On the [gh-pages](https://github.com/jessesqui
117 Kit/tree/gh-pages) branch of [JSQCoreDataKit](https://github.com/jessesqui
119 The first is [build_docs.sh](https://github.com/jessesqui
119 s.zsh), which will update the submodule and build the docs. These can
133 The second is [publish_docs.sh](https://github.com/jessesqui
145 I switch directories to the gh-pages checkout and run `./publish_
159 ithub.io/JSQCoreDataKit/) for JSQCoreDataKit.

_posts/2016-05-22-open-source-everything.md

Line Typo
22 the fourth major version of [JSQCoreDataKit](https://github.com/jessesqui
22 this release. That's right. [Sébastien Duperron](http://code-craftsm
22 ase. That's right. [Sébastien Duperron](http://code-craftsman.fr/abo
22 ode-craftsman.fr/about/) ([@Liquidsoul](https://github.com/Liquids
40 complete picture for how your APIs should behave. Continuous int
40 lures or test coverage. Once [travis-ci](https://travis-ci.org/jesses
40 esquires/JSQCoreDataKit) and [codecov.io](https://codecov.io/gh/jesses
42 {% include image.html
43 file="tests_pass.jpg"
46 source_link=null
47 half_width=false
52 ing** — bugs, features, todo items, refactors, future work
54 o makes it easier to write a [changelog](https://github.com/jessesqui
56 in their changes because of [travis-ci](https://travis-ci.org/jesses
56 esquires/JSQCoreDataKit) and [codecov.io](https://codecov.io/gh/jesses
60 So that's what happened. Sébastien was able to synthesize and na
60 ue for the 4.0.0 release of JSQCoreDataKit. We had some discussion and I

_posts/2016-06-04-avoiding-objc-in-swift.md

Line Typo
10 yntax introduced by proposal [SE-0022](https://github.com/apple/swi
16 nfigurations, especially with UIKit.
92 - We're using structs (the ViewModel) in the prot
137 se this is the best and "most Swifty" answer to the problem. Howev
137 always immediately clear when Xcode suddenly starts yelling at yo
137 else* — especially when Xcode's fix-its are usually what you

_posts/2016-07-25-migrating-to-swift-3.md

Line Typo
16 l the changes and errors from Xcode's migration tool at once. The b
27 branch from develop and run Xcode's migrator for Swift 2.3
28 e swift2.3 branch** and run Xcode's migrator for Swift 3.0
40 op` when the final release of Xcode 8 is out.
51 brary. This ensures semantic v**ersioning** and allow
55 directly to Swift 3.0. I use C**ocoaPods,** so I
57 escribed above. For example, [AlamoFire](https://github.com/Alamofire
59 Until Xcode 8 is final, you'll need to po
65 This tells CocoaPods to fetch the latest on the `s
67 rate your main app. I suggest commiting all of this migration in a si
73 ** and having a list of green checkmarks once the migration is over is
74 grate, commit, then make Swifty API changes in a follow-up c
75 as, so you have to apply each Xcode fix-it individually.
81 Xcode's migration tool is not perfect
86 in contexts often resulted in derpy things like `(indexPath as! N
87 - Enums with associated NSDate valu

_posts/2016-07-31-enums-as-configs.md

Line Typo
20 he same basic cell layout and subviews, but different visual treatme
128 ation to a class's designated initializer.
136 provide default values in the initializer:
198 cl/NSURLSessionConfiguration) APIs are designed. Among others, t
206 ifty-presenters/) about these APIs.
208 t's look at the evolution of [JSQMessagesViewController](https://jessesquires.github.
208 8) an enum to determine how timestamps were displayed in the message
208 y do not even have to contain timestamps! The API just asks for any ar
208 ide more powerful and simpler APIs for clients for custom config

_posts/2016-09-30-speaking-at-frenchkit.md

Line Typo
16 -proposals-in-30-minutes) at **FrenchKit** in Pari
16 considering it was the first FrenchKit ever. I think the organizers
16 rs are already thinking about FrenchKit 2017, so keep an eye out and
28 and mentally paste it here. &#x1F604; Always, these indie conferen
28 ple — and the people at FrenchKit were awesome. We do not often
30 fr/#programme), I got to meet Bas Broek ([@BasThomas](https
30 programme), I got to meet Bas Broek ([@BasThomas](https://twi
30 I got to meet Bas Broek ([@BasThomas](https://twitter.com/BasTho
30 weekly.github.io), as well as Sébastien Duperron ([@liquidseb](ht
30 hub.io), as well as Sébastien Duperron ([@liquidseb](https://twi
30 ll as Sébastien Duperron ([@liquidseb](https://twitter.com/liquid
30 contributed significantly to [JSQCoreDataKit](https://github.com/jessesqui
30 ks (including a few users of [JSQMessages](https://github.com/jessesqui
32 organizers opened with a mock Apple-esque keynote. It was hilarious and
32 The conference closed with &#x1F9C0; and 🍷 (of course) an
32 e closed with 🧀 and &#x1F377; (of course) and a fun pub qu
34 {% include image.html
35 file="frenchkit-michel.jpg"
35 file="frenchkit-michel.jpg"
36 alt="FrenchKit pub quiz"
38 source_link=null
39 half_width=false
44 tps://twitter.com/nlauquin), [Mathieu](https://twitter.com/Monsieur
44 nsieurDart), and everyone at **Xebia**

_posts/2016-10-01-shipping-swift-3.md

Line Typo
16 ans if you were using version 3.x of a library, then the 4.0 re
16 ase is for Swift 3. Semantic **versioning** is key he
20 - [JSQDataSourcesKit](https://github.com/jessesqui
21 - [JSQCoreDataKit](https://github.com/jessesqui
22 - [PresenterKit](https://github.com/jessesqui
23 - [JSQWebViewController](https://github.com/jessesqui
24 - [DefaultStringConvertible](https://github.com/jessesqui
32 5. Rebase the swift3.0 branch onto `d
53 - [GrandSugarDispatch](https://github.com/jessesqui
54 - [JSQNotificationObserverKit](https://github.com/jessesqui
55 - [JSQActivityKit](https://github.com/jessesqui

_posts/2016-10-03-understanding-swift-evolution.md

Line Typo
10 I recently [spoke at the FrenchKit conference]({{ site.url }}{%
24 ub.com/apple/swift-evolution) repo
29 wn. I've filed a few radars: [rdar://28589341](https://openradar
29 /radar?id=6066152501411840), [rdar://28589062](https://openradar
29 /radar?id=6673199689367552), [rdar://28589211](https://openradar
31 contain most of the proposal metadata, as well as the raw file cont
50 ts (1 or more), a Status, a filename, the file contents, and the t
111 rough metric for complexity, i**.e.** the longer a proposal is, the
111 complex change. For example, [SE-0107: UnsafeRawPointer API](http
111 ange. For example, [SE-0107: UnsafeRawPointer API](https://github.com/appl
111 at around 7,300 words, while [SE-0114: *Updating Buffer "Value" Nam
111 e lower-level UnsafePointer APIs. How does the complexity of p
127 - Erica Sad**un** has a
131 1. Erica Sadun, 25
132 2. Doug Gregor, 15
133 3. Joe Groff, 12
134 4. Dave Abrahams, 10
135 5. Chris Lattner, 10
136 6. Dmitri Gribenko, 7
137 7. Jacob Bandes-Storch, 6
139 9. Austin Zheng, 5
146 s still young — and our dataset of proposals is quite small.

_posts/2016-11-05-140-proposals-frenchkit-video.md

Line Typo
16 As you may know, I [spoke at FrenchKit]({{ site.url }}{% post_url 20
26 als — exploring statistics on metadata and more, and examining why a

_posts/2017-01-08-swift-documentation-part-2.md

Line Typo
16 e docs script that I use for [PresenterKit](https://github.com/jessesqui
34 nal, custom markdown docs. In PresenterKit, this is used to generate the

_posts/2017-01-16-testing-without-ocmock.md

Line Typo
10 **OCMock** is a powe
10 ss to the dynamic Objective-C runtime? Or, what if you don't want y
18 ible, especially in a [legacy codebase](https://www.amazon.com/dp/01
29 ng are for networking events, analytics logging, and user interaction
54 ock ControllerProtocol with OCMock in an Objective-C test:

_posts/2017-02-10-refactoring-singletons-in-swift.md

Line Typo
10 test, and they entangle your codebase when used implicitly in other
100 d liberate your debt-stricken codebase. While dependency injection i
102 there is a real problem. The initializer for MyViewController used t
102 er to view controller. Legacy codebases in particular will struggle t
104 The initializer for most classes (and especia
106 e in a complex, large, legacy codebase — at least not at once,
112 g too much complexity in your codebase. Maybe your app really will o
128 Now, the initializer has not changed from the pers
136 can continue working in your codebase as if nothing ever changed.
152 adding a new property and an initializer parameter with a default valu
154 xamples here — classes, structs, enums, functions. Every func
154 ere — classes, structs, enums, functions. Every function in

_posts/2017-06-05-protocol-composition-in-swift-and-objc.md

Line Typo
16 l the time while working with UIKit, for example. But despite the
16 ional method, you'll crash at runtime with a 'does not respond to s
44 but you incur the additional runtime cost of checking `-respondsTo
60 ou do not have to worry about runtime crashes in Swift, but there i
60 ure relies on the Objective-C runtime and **it only exists for inte
60 ch means you cannot use Swift structs, enums, or other nice feature
60 you cannot use Swift structs, enums, or other nice features. This
68 exactly that. Thus, we could reimagine these APIs in the following w
68 hus, we could reimagine these APIs in the following way:
111 and delegate properties is unintuitive and cumbersome. How can we im
185 UPDATE: [@iankay](https://twitter.com/IanKay/s

_posts/2017-07-16-officially-deprecating-jsqmessagesviewcontroller.md

Line Typo
11 Beginning immediately, [JSQMessagesViewController](https://github.com/jessesqui
15 {% include updated_notice.html
16 update_message='The community has started a
25 or so libraries available via CocoaPods. [CocoaPods](https://cocoapod
25 ies available via CocoaPods. **CocoaPods** now h
25 otes, or even proper semantic versioning. I had no idea what I was doi
41 the library as deprecated in CocoaPods today.
43 here are similar libraries in CocoaPods. I cannot vouch for any of th
51 g 11,000 stars. According to [CocoaPods stats](https://cocoapods.org/

_posts/2017-07-17-a-story-about-swift-source-compat.md

Line Typo
10 erent story when your project seg faults the compiler. When tha
10 is released. This is why the [swift-source-compat-suite](https://github.com/apple/swi
14 ### About Swift source-compat
18 The scripts read the project metadata from the manifest, do a `git
22 I maintain a unique project. [JSQDataSourcesKit](https://github.com/jessesqui
22 urcesKit) originally broke in Xcode 8.3 beta 3 (8W132p). [It cr
22 error. This was before the swift-source-compat-suite existed. I'm no compiler expe
22 -4088). Within a week or so, [Slava came to the rescue with a fix
22 887). In the final release of Xcode 8.3, my project compiled.
24 comment-255288) reappeared in Xcode 9 beta 1 (9M136h) — a
24 mdash; adding this project to swift-source-compat-suite had been on my Todo list fo
24 -compat-suite had been on my Todo list for weeks. It would hav
24 ity regression* in a previous Xcode beta. [Fool me once](http:/
26 were hitting this bug in the source-compat suite. This seemed to get eve
26 . By midnight that same day, [Slava had a fix ready](https://gith
28 In Xcode 9 beta 3 (9M174d), not only
69 First, you define all of the metadata about your project and find a
75 It is clear to me that swift-source-compat-suite is extremely valuable. Withou
75 munity. Also, huge thanks to [Slava](https://twitter.com/slava_pe

_posts/2017-08-08-customizing-git-log.md

Line Typo
20 As much as Greg **Heo** would [
20 miss* about hg — the [smartlog](https://www.mercurial-scm.or
24 ll commit message, along with metadata like date and author. If you
24 Run git log in one of your repos.
38 you can set an alias called "smartlog". You can also find a [gist h
44 Here's a comparison (using [IGListKit](https://github.com/Instagram
48 H). If available, ref names (e**.g.** branches, tags, etc.) (%d`)
48 followed by a relative date (e**.g.** "2 days ago") (%cr). Next i

_posts/2017-09-03-supporting-json-feed.md

Line Typo
10 upport for Brent Simmons' and Manton Reece's [JSON Feed](https://j
10 for Brent Simmons' and Manton Reece's [JSON Feed](https://jsonfeed.
14 {% include blockquote.html
24 s that — like Brent and Manton so clearly articulate —
28 .json). You fill-in your site metadata, and iterate through each pos
28 ice that it's similar to [the feed.xml](https://github.com/jessesqui

_posts/2017-09-10-building-a-site-with-jekyll-on-nfsn.md

Line Typo
11 inexpensive bare-bones host, [NearlyFreeSpeech.net](https://www.nearlyfreespeech
15 {% include updated_notice.html
16 update_message="This post has been updated t
16 o reflect recent changes with NearlyFreeSpeech, as well as changes in my set
21 * This site hosted on [NearlyFreeSpeech.net](https://www.nearlyfreespeech
22 ttps://jekyllrb.com) via the [github-pages gem](https://github.com/githu
23 HTML, CSS, and JS. (And thus **jQuery.)** I've
23 themes.getbootstrap.com), or **JekyllThemes,** or
23 http://jekyllthemes.org), or [Octopress](http://octopress.org/docs/th
25 umps the output in the public www directory.
30 te in seconds by deleting the repo on GitHub if you decide it's
32 ave to view the errors on the repo settings page, and if the err
32 rror is something generic and unactionable, you're stuck navigating thro
34 e with unsupported "plugins" (i.e., gems) or certain configurati
36 b.io/`, for example [jessesquires.github.io/JSQDataSourcesKit](https://je
36 ample [jessesquires.github.io/JSQDataSourcesKit](https://jessesquires.github.
36 t>. For example, if my pages **repo** is jessesquires.github.io` a
38 main. For non-custom domains (i.e., the default `.gith
38 g/enforcing HTTPS is a simple checkbox in your repo settings. Appare
38 is a simple checkbox in your repo settings. Apparently there ar
38 om-domain-website-https/) via Cloudflare, but that seems cumbersome an
40 registered my domain through [NearlyFreeSpeech](https://www.nearlyfreespeech
44 ### About NearlyFreeSpeech.net and why
46 ly you've noticed the amazing double-entendre — "nearly free" as in [
46 s that it's not Amazon or GoDaddy. You are free from the shackl
48 {% include updated_notice.html
49 update_message="My costs are now around $
54 n NFSN, setting up a bare Git repo, and configuring everything s
56 o create a Gemfile and use **Bundler.** For any
66 would recommend. My [current Gemfile looks like this](https://gith
84 For any NearlyFreeSpeech site, [there are several subd
87 r static HTML files, images, .htaccess files, and most scripts in th
90 essible via the web, like Git repos, or privately used gems for a
99 e setup for Ruby and install **Bundler.** After ss
99 er](http://bundler.io). After ssh'ing into NFSN, you'll need to add
116 r remote when you clone the repo to your machine.
125 You can clone this repo locally.
143 you git push to the remote repo on your NFSN server. In the b
143 your NFSN server. In the bare repo you created (site.git), the
166 latest changes from the bare repo. Because this runs from the b
166 cause this runs from the bare repo hooks/ directory, we need t
166 is takes care of that.) Using Bundler allows you to easily keep gem
180 s. In your local clone of the repo, git commit your changes an
188 en it comes to your local git repo. With GitHub Pages, you'll al
188 Pages, you'll already have a repo setup on GitHub and cloned lo
188 .origin` to NFSN (to the bare repo you created there), and add a
196 en source, then don't add the github remote. Push to NFSN and your
202 ve the CNAME file from your repo. Push to NFSN (origin) and
203 e your <username>.github.io repo. I renamed mine to `jessesqui
203 remote.github to your local repo, don't forget to reset the ur
203 po, don't forget to reset the url to the new repo name.
203 t to reset the url to the new repo name.
213 FSN, I decided to make a new [jessesquires.github.io](https://github.com/jessesqui
213 .github.io) GitHub Pages site repo. This is simply a landing pag
217 ee*, it is nearly free. &#x1F609;

_posts/2017-09-18-measuring-compile-times-xcode9.md

Line Typo
16 0ccf0e1fb6729eea75bc09cbd5) a frontend Swift compiler flag that woul
16 g that would emit warnings in Xcode for functions that took too l
16 ok too long to type-check. In Xcode 9, there's a new, similar fla
22 [Bryan Irace](http://irace.me/swift-profil
22 race.me/swift-profiling) and [Soroush Khanlou](http://khanlou.com/2
22 swift-profiling) and [Soroush Khanlou](http://khanlou.com/2016/12/g
22 0` would trigger a warning in Xcode for any function that took lo
22 unction that took longer than 100ms to type-check. This was alway
22 e1fb6729eea75bc09cbd5): *As a frontend option, this is UNSUPPORTED a
22 ver, this flag still works in Xcode 9 and I haven't seen any disc
26 In Xcode 9, there is a new, similar fl
26 appearance in the official Xcode 9 GM [release notes](https://
39 shold is too low, for example 10ms, then you will get a ton
39 pressions to compile in under 200ms. Also, I recommend setting th
41 re two common scenarios where Xcode will start emitting warnings
47 usly a temporary (and kind of hacky) solution to improving compil
51 e [this doc in the main Swift repo](https://github.com/apple/swi

_posts/2017-09-24-when-your-app-is-used-in-unexpected-ways.md

Line Typo
16 **PlanGrid** is
16 n simply did not exist before PlanGrid, and they still have a lot of
20 At PlanGrid, we recently discovered that
26 {% include blockquote.html
27 quote="Adapting PlanGrid to Archaeology
29 n of the construction program PlanGrid as a digital field registrati
29 egistration system at the Tel Burna Archaeological Project (Israe
29 ng: (1) the benefits of using PlanGrid with tablets and smartphones;
29 ur specific adaptation at Tel Burna; (3) this past season’s innov
29 other projects may implement PlanGrid as a digital archaeological t
35 the last few seasons, the Tel Burna Archaeological Project has ta
35 vor through our adaptation of PlanGrid as a replacement for our hand
35 ritten paper forms and plans. PlanGrid is a widely-used construction
37 the main features that allow PlanGrid to streamline workflow within
37 rchitectural plan management; searchable and adaptable annotations; ar
37 easurements; well-defined and useable administrator tools; simple r
45 {% include image.html
46 file="plangrid-archaeology-2.jpg"
46 file="plangrid-archaeology-2.jpg"
47 alt="PlanGrid for Archaeology"
48 caption="PlanGrid used for Archaeology"
49 source_link="http://popular-archaeology.c
50 half_width=false

_posts/2017-10-01-floating-point-swift-ulp-and-epsilon.md

Line Typo
17 {% include updated_notice.html
18 update_message='I gave a talk on the topics
21 {% include image.html
22 external_url="https://media.giphy.com/medi
25 source_link=null
26 half_width=false
35 - [SE-0104](https://github.com/apple/swi
36 - [SE-0113](https://github.com/apple/swi
36 ntegral rounding functions to FloatingPoint* (Swift 3)
37 - [SE-0067](https://github.com/apple/swi
47 ificant digit in this value’s significand. For most numbers x, this is
53 As [Olivier Halligon](http://alisoftware.github.io
55 > NOTE: Rationale for "ulp" instead of "epsilon":
58 or of two or so. By contrast "ulp" is a term with a specific un
64 *By contrast “ulp” is a term with a specific un
64 ace) for Unit in the Last Place, or Unit of **L
64 or Unit of Least Precision. It's a unit, but what does i
68 We do not need any notion of "ulp" for integers. They are simpl
70 e set of all real numbers is [uncountably infinite](https://en.wikipedi
72 resentable value* — or, ulp**.** Thus, aside from the obvious
72 of silicon chips, this is why ulp needs to exist.
74 {% include image.html
75 file="numbers.jpg"
78 source_link=null
79 half_width=false
84 Before we define ulp**,** let's briefly review the mem
86 g/wiki/Exponent_bias)), and a significand. For single precision, there'
86 exponent, and 23 bits for the significand — 32 bits total. Double
86 exponent and 52 bits for the significand, which totals 64 bits. I won'
88 {% include image.html
89 file="float32memory.png"
90 alt="Floating-point format, binary32"
92 source_link="http://blog.reverberate.org/
93 half_width=false
98 Let's look at an example in base-10. We can represent 123.45 with
98 e can represent 123.45 with a significand of 12345 and exponent of -2:
116 Additionally, Swift's APIs allow us to explore the memor
116 verify them with this [handy IEEE-754 floating-point converter](htt
136 0.pdf) — 1.19e-07 for 32-bit values (Float) and `2.22e-1
136 (Float) and 2.22e-16 for 64-bit values (Double). As expecte
194 oilerplate') files, read [Ole Begemann's post](https://oleb.net/blog/2
221 dash; the sign, exponent, and significand. This code eventually calls i
221 ntually calls into the public initializer: `init(sign: exponentBitPatte
223 ew the implementation of this initializer. We see a lot of [bit manipul
223 ki/Bit_manipulation), namely [bitwise AND](https://developer.apple.
242 This initializer eventually calls into `init(b
242 y constructs a primitive LLVM 32-bit float (FPIEEE32) from the raw
250 Swift playground. For private APIs like `Float._infinityExponent
303 So that's ulp**.** There's still a lot to unpac
303 helpful to better understand ulp and a little about floating-p
310 programmer-should.html), Josh Haberman
312 g_point_visually_explained/), Fabien Sanglard
312 _visually_explained/), Fabien Sanglard
313 status/IEEE754.PDF), Prof. W. Kahan, UC Berkeley
314 - [IEEE**-754** Floating Point Converter](htt

_posts/2017-12-28-swift-weekly-brief-hiatus.md

Line Typo
21 {% include updated_notice.html
22 update_message='The <a href="https://swiftwe
22 BasThomas" class="alert-link">Bas Broek and other contribut
22 homas" class="alert-link">Bas Broek and other contributors. T
22 ribe via RSS/Atom, JSON feed, AppleNews, or Twitter.'
33 d in the newsletter, the new [Swift.org forums](https://forums.swift.
41 I am more than happy to help onboard any newcomers — whateve
49 ted to take the model of [iOS Dev Weekly](http://iosd**ev**weekly.c
53 del and foundation for [Colin Eberhardt](https://twitter.com/ColinEbe
53 to start his own newsletter, [WebAssembly Weekly](http://wasmweekly.new
61 - Brian Gesiak, [@modocache](https://twitter
61 - Brian Gesiak, [@modocache](https://twitter.com/modocach
62 - JP Simard, [@simjp](https://twitter.com
62 - JP Simard, @si**mjp**
63 - Bas Broek, [@basThomas](https://t
63 - Bas Broek, [@BasThomas](https://twitter
63 - Bas Broek, [@BasThomas](https://twitter.com/BasThoma
64 - Greg Heo, [@gregheo](https://twitter.c
64 - Greg Heo, @gr**egheo**
65 - Ben Asher, [@benasher44](https://twitter.com/benasher
66 - Garric Nahapetian, [@garricn](https:
66 - Garric Nahapetian, [@garricn](https://twitter.c
66 - Garric Nahapetian, @ga**rricn**
67 - Roman Volkov, [@volkovre](https://twitter.
67 - Roman Volkov, [@volkovre](https://twitter.com/volkovre

_posts/2018-02-25-replacing-google-with-duckduckgo.md

Line Typo
16 in general. I've been using **DuckDuckGo** for
26 oject.org) results, which are diplayed prominently in search, [threa
32 ### Benefits of DuckDuckGo
34 Apple products and services, DuckDuckGo was established with [privacy
34 not mine your data to do so. DuckDuckGo also sometimes adds an affili
34 dds an affiliate code to some eCommerce sites, but this is done witho
34 business or legal purposes". DuckDuckGo provides a strikingly differe
36 {% include blockquote.html
38 source="Gabriel Weinberg, [DuckDuckGo Privacy](https://duckduckgo.c
41 -of-Google) of reasons to use DuckDuckGo. I won't bother reiterating e
41 an type !giphy oh yeah into DuckDuckGo and land directly on [Giphy's
41 kDuckGo and land directly on [Giphy's search results](https://giphy
45 After over a year of using DuckDuckGo, I think search quality is ex
45 l, I'm incredibly happy using DuckDuckGo. If you aren't satisfied with
45 If you aren't satisfied with DuckDuckGo's results, you can always `!goo
49 used here before switching to DuckDuckGo. You enter your site url, con
49 ckDuckGo. You enter your site url, configure some settings, and
51 Creating a [custom DuckDuckGo search](https://duckduckgo.co
51 our own search box with basic html forms — something Googl
73 search and replacing it with DuckDuckGo. It's much more elegant, ligh
75 class="text-muted">Thanks to [Stuard Colville](https://muffinresea
75 text-muted">Thanks to [Stuard Colville](https://muffinresearch.co.uk
75 t on doing this without using iframes.
79 time to switch. By supporting DuckDuckGo, you will only help improve t

_posts/2018-04-16-upgrading-to-bootstrap-4.md

Line Typo
10 18/04/09/bootstrap-4-1/) from v3.3.7. Its a major version with lots
18 ation/#grid-system) to using [flexbox](https://developer.mozilla.or
34 tain. It's easy to get wrong. Flexbox simplifies this, allowing you
50 the links to GitHub, Twitter, LinkedIn, etc). Those are placed in a
68 highly recommend upgrading to v4. If you don't use Bootstrap,
76 de into new components using [jekyll includes](https://jekyllrb.co

_posts/2018-06-10-why-optional-swift-closures-are-escaping.md

Line Typo
9 escaping by default. After [SE-103](https://github.com/apple/swi
13 make a closure escaping. Greg Heo provides [a great explanation
13 eat explanation over on Swift Unboxed](https://swiftunboxed.com/lan
15 scaping in Objective-C. [Doug Gregor explained the problem](https:
23 res were treated differently. Optionals are [just a 2-case enum](http
23 Optionals are [just a 2-case enum](https://github.com/apple/swi
23 e isn't much different from a struct that has a closure property:

_posts/2018-07-05-swifts-new-calling-convention.md

Line Typo
14 on specifies how subroutines (e.g., functions) should receive th
14 ct between the caller and the callee, so that each knows which ins
16 , and when? The caller or the callee? This is what changed in Sw
26 tion prior to Swift 4.2, "callee-owned".
82 It is no longer the callee's responsibility to release the
82 e size reduction as well as a runtime performance improvement, beca
84 ### Calling non-inlinable functions in other modules
86 change is the case of calling non-inlinable functions across module bound
86 s module boundaries. [Michael Gottesman](https://twitter.com/gottesma
172 ht. In the old convention ("callee-owned"), it was not possible to per
172 bility of the caller, not the callee, the optimizer can eliminate

_posts/2018-07-29-swift-tip-building-arrays-with-compactmap.md

Line Typo
13 imilar scenario recently. In **PlanGrid,** we use
13 om/plangrid/reactivelists) to declaratively build our user interfaces for
59 esulting array is an array of optionals. We don't want that, because
59 he table. It's better to keep optionals as far to the edge of our obj
84 mprovement. We've removed the optionals. It works, but it has a few p
84 has a few problems. It's very stateful and imperative. It's not very
84 compactMap() to remove the optionals.
99 of these functions to return optionals or non-optionals and this cod
99 ctions to return optionals or non-optionals and this code never has to ch

_posts/2020-01-06-selecting-an-xcode-version-on-github-ci.md

Line Typo
9 into is selecting a specific Xcode version, which is a bit cumbe
13 not find anything mentioning Xcode versions. I discovered the do
13 ll the installed software and SDKs, which is convenient and well
13 early specifies the available Xcode versions that are installed,
17 are doing it. I noticed that [Alamofire](https://github.com/Alamofire
17 ci.yml#L18) in their workflow yaml file. Apparently, you can set
29 who is a [top contributor to Alamofire](https://github.com/Alamofire
31 sts. It would be great to see Xcode version selection improved, b

Generated by 🚫 Danger

@jessesquires jessesquires deleted the link-check branch October 11, 2020 23:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants