FrenchKit 2017
In the end of September 2017, I visited Paris, France to attend FrenchKit - an iOS conference as a presenter in one of its workshops. In this blog, I describe how the conference went.
This post will be updated as soon as the new videos will be published.
Contents
- Contents
- Day 1
- Day 2
- Core Data Custom Stores
- Pushing Forward iOS Notifications
- Rewriting Your Model, Undo and Threading One Step at a Time
- Profiling Swift Performance on Linux
- What’s up with Swift 5
- Working at scale - How to Save Time with Ci and Build Time Reduction
- Core ML - Let’s Talk about Models
- Don’t Worry, Be Lazy
- Scaling Open Source Communities
- Update Your Reality with Vision and ARKit
- UI automation classroom
- Other classrooms
- Conclusion
Day 1
The first day started with a light Parisian breakfast of croissants and coffee and the whole auditorium was quickly filled up to the capacity. From the Keynote presentation, I learned that this time the conference was fully booked with 250 participants coming to visit from all over the world.
The presentations list and conference schedule was announced in Keynote, and it felt like a lot of presentations to see, and what’s more, there’ll be 2 hours to attend a workshop - one of the classrooms. The conference had an official app with agenda and information about speakers, free Wi-Fi and lots of good content. Check it out.
Playground Driven Development
In the first presentation of the day, Brandon Williams (@brandonw) spoke about using playgrounds in development of view controllers. To me, in the beginning of the presentation, was a bit intriguing to see what would the development process look like, and closer to the live demo I was fully sold on the approach.
The main idea is that you can develop and incorporate view controllers inside playgrounds, creating 1 playground per view controller, just like Kickstarter app does. This will shorten your write-build-run cycle, because loading playground is much faster than building the app, navigating to the developed screen, and seeing how it works.
There are other advantages of the approach, too, like view controller isolation, ease of configuration (changing size class and see how the view will be rendered in few moments).
Overall, I highly recommend watching this one.
Table and Collection Views Optimization
This presentation by Janina Kutyn was about optimizing scrolling performance of table views and collection views via offloading GPU processing to CPU.
Essentially, you’ll be using draw() method to draw your cell’s contents on the screen and avoid using lots of UIViews and auto layout.
The slides feature cute chimps and monkeys, check it out yourself!
What Would Tomster Do?
Next presentation was a bit special because it was out of iOS discourse. The presentation by Julien Palmas (@bartocc) was about using Ember.js to write single-page applications for browsers.
Generally, the approach in Ember.js is similar as writing a server-side app in Ruby on Rails: you have routes, views, and Ember.js handling many things for you automatically with convention over configuration.
I learned that this framework is used across many websites, among which is iCloud!
To widen your horizons, please watch the presentation here.
Mocking with Swift
This presentation by Bruno Virlet (@bvirlet) reviewed the common ways to write mocks in Swift and then went one step further to employ Sourcery to metaprogram template that would generate a mock based on an interface - automagically!
No more written-by-hand boilerplate mocks, stubs and fake objects, just use Sourcery to generate the code for your protocol and you’re on your way to faster and easier development process.
To learn how to automate everything you mock, watch the presentation here.
How Apps Are Actually Built
This presentation by Romain Pouclet (@Palleas) was quite interesting to see because of a real-world data from BuddyBuild, who analyzed projects they built and shared this information with FrenchKit’s attendees.
As I expected, most projects use CocoaPods for dependency management, though, many projects don’t use any dependency management (by the way, our project, too).
Surprisingly for me, very small amount of projects were actually running their unit tests, although many projects had unit test targets (auto-created by Xcode?). Definitely, something to improve on.
Learn more about industry statistics in this presentation.
Server(less) Swift
The presentation by Chris Bailey (@Chris__Bailey) was about using Swift for running functions in the cloud. Specifically, about how to use Kitura and IBM’s serverless service to write, deploy and run your Swift code, function by function.
Personally, I’m not sure where exactly this technology would be useful. I’ve heard conversational bots, sending push notifications, … probably, time will show.
Anyways, the Swift on server topic is an interesting one, and you can learn more about this technology in this presentation.
May the Code Review Be with You
If there would have been an award for the best presentation slides, I think, this one would win it for sure. The talk by Egor Tolstoy (@igrekde) is exploring different aspects of building an effective code review culture.
The talk presents different tips about code review ethics, technical details and organizational solutions to common code review problems.
You definitely have to watch it, check it out here.
Safety-Critical Development, AdaCore
The talk from AdaCore engineer, Clément Bourgeois, was about Ada programming language, and general reflection on what possibilities are opening when programs written with lots of explicit information.
One of the best moments in this talk was a realization that your code can be mathematically proven for correctness. I think it’s really cool. That means not only your code works for test cases, but for all possible types of inputs, and compiler making sure this is true for you.
To learn more about Ada, the language of Aerospace computing, watch this presentation here.
You Deserve Nice Things
The talk with an attractive name “You deserve nice things” by Soroush Khanlou (@khanlou) presents an approach that, I think, every developer should follow to make his or her life easier. Namely, wrapping awkward-looking or not so readable APIs into better methods, primarily, using extensions.
Soroush goes into detailed examples of how one could transform platform APIs from Apple into better code.
Check this talk out here.
Classroom from Deezer
When all presentations finished, there was time for classrooms. A classroom was a workshop on some topic. For my classroom, I picked Deezer’s workshop on writing music visualizer with GPU shaders conducted by Adrien Coye de Brunélis.
The classroom was easy to follow through because it was structured into separate exercises. In the end, we ended up having Deezer’s logo animated based on the music played. It was cool.
To me, it was surprising how much configuration is required to run just a simple program using OpenGL ES and shaders. UIKit and CoreGraphics, by comparison, are much much much easier to use.
So if you’re also interested to see the code behind shader programming, check out classroom repository on GitHub.
Other classrooms
Other classrooms during the first day were:
- A modern development workflow - Romain Pouclet - BuddyBuild [GitHub]
- From API Description To Tests & Mocks - Micha Mazaheri [GitHub]
- Intermediate and Advanced RxSwift - Florent Pillet [GitHub1] [GitHub2]
- Fastlane from zero to Hero - Julien Quéré [GitHub]
Day 2
The second day was more relaxed compared to first one, probably because of the previous night in the pub for many of the attendees. It felt like people made some friends already. It felt cozy.
Core Data Custom Stores
The first presenter, Rew Islam (@dashlane_rew), was talking about different ways to implement custom data stores in Core Data.
It turns out, Core Data is capable to work with custom stores that could implement storage using a custom data format, or even through a REST service!
Pushing Forward iOS Notifications
This presentation about push notifications guidelines from Adrien Humilière (@adhumi) was concerned with being a “good citizen” among apps on user’s device.
In a world with competition over user’s attention it is much easier to delete an app with annoying push notifications than to disable notification settings.
Rewriting Your Model, Undo and Threading One Step at a Time
Next presentation from the Sketch’s founder, Pieter Omvlee (Tumblr), was a long story how the app lived through evolving model, starting from a simple object graph and ending with a tree of objects representing objects on the canvas.
Profiling Swift Performance on Linux
In this presentation, JP Simard (@simjp) is talking about hardships during profiling of Swift code on Linux. Specifically, about ways to find time profiling visual.
What’s up with Swift 5
Next presentation from Bas Broek (@BasThomas) was about current status and approved proposals for Swift 5.
In the talk, Bas went through different proposals accepted in Swift 5 and mentioned ABI stability as well as Swift concurrency manifesto written by Chris Lattner. The talk gave a good overview of what’s coming next in Swift.
Working at scale - How to Save Time with Ci and Build Time Reduction
This presentation from Yusei Nishiyama (@yuseinishiyama) is telling about continuous integration setup at Cookpad, with the team across the world working remotely.
Yusei talks about code reviews, improving their metrics, and improving build times. For me, the interesting part was using code review metrics with Grafana to visualize pull-request review time.
Core ML - Let’s Talk about Models
In this presentation David Bonnet (@iGranDav) explained and showed the approach to train a neural network on a popular MNist data set to build a custom CoreML model for handwritten digit recognition.
Don’t Worry, Be Lazy
In this talk, Olivier Halligon (@aligatr) told about SwiftGen and Sourcery - tools to improve code quality.
It was interesting to learn about those two, and additionally about Gyro - a custom tool to transform xcdatamodel to a Realm classes for iOS and Android.
Scaling Open Source Communities
In this talk, Felix Krause (@KrauseFx) shared his impressive experience in growing and scaling a community of the fastlane project on GitHub. The author shares techniques on how to automate repetitive tasks in order to keep a number of issues under control and keep one’s sanity.
Update Your Reality with Vision and ARKit
In this talk, Xebia’s engineer Julien Datour showcases the small app that he built for the conference using ARKit and Vision framework. The app uses Vision to detect rectangles (physical OSS project cards) on a plane, then finds QR code within the rectangle and based on the GitHub link inside QR-code renders information about GitHub repository on top of the detected rectangle.
UI automation classroom
After all of the presentations finished it was my turn to conduct a workshop among 4 other workshops. Mine was about UI testing in Swift. In the workshop, attendees learned tips and tricks for working with UI tests, specifically: general tips on testing; writing tests for table views and collection views; using localized strings in UI tests and using a mock server for network requests.
You can find more information about the workshop contents on GitHub. It includes presentation slides, example project, and solutions to the problems (in branches “step1”, “step2”, and so on).
Other classrooms
Other classrooms that day were:
- A modern development workflow - Romain Pouclet - BuddyBuild [GitHub]
- Leveraging Swift and GLSL shaders to animate realtime music visualisations - Adrien Coye de Brunélis - Deezer [GitHub]
- Build a Swift Backend-for-Frontend (BFF) - Chris Bailey [GitHub]
- Mastering code generation and SwiftGen and Sourcery templates - Olivier Halligon [GitHub]
Conclusion
To me, the 2 days I spent at the FrenchKit conference went very quick and were worth it 100%. My big thank you to FrenchKit organizers, speakers, and attendees, as well as to Zalando for sponsoring my trip.
I learned a lot from presentations, had a good time socializing with other developers, and generally had lots of fun. I definitely recommend attending it.