Courset 0.2.1 Update Released

Sometimes you have to change your release plans, especially when something like this happens: on September 15 Apple said during their annual September event that iOS 14 will be out next day! That was a challenge for a lot of us developers, and for me too. Because of timezones, I didn’t have enough time on September 15, so I had do everything on the next day before 2 pm to have a chance to get Timerange and Courset released in time with iOS 14.

My initial plan about Courset was to release v0.3 with new features like course notifications along with iOS 14 improvements. This I had to change, so I’ve split these updates into two: 0.2.1 and 0.3. The former is already in the App Store, so be sure to update as soon as you’re on iOS 14! The app also no longer supports iOS 13 because of all the new SwiftUI features that I have to get to continue developing Courset. Stay tuned to hear more about 0.3 and future updates of Courset — we’re going to make this a perfect courses tracker!

Courset 0.2 Update Released

Time for the first Courset update! Now you can edit your courses, add schedules and manage them. New schedules list screen conveniently displays all schedules of a course on a timeline chart. The update also includes many small fixes throughout the app.

Of course the ability to edit courses you add and manage their schedules is most important, since it’s a course manager app, but it was not as fun to make as this little chart above. I think it’s the most important feature not only because it’s convenient for user, but also it gave me a lot of experience (insert Skyrim level up sound here) writing this kind of stuff in SwiftUI. It’s not interactive, it just visualizes schedule dates for you to make it easier to plan the schedule. But it was done using only SwiftUI, and it really shows me the power of the framework. It’s just a combination of a small amount of math, GeometryReader, Rectangle, Path, and some overlapping detection code so month names don’t appear if there’s no space for them.

So now we have an app in the App Store built 90% on SwiftUI that has already been updated once. I think now I can write some SwiftUI tutorials for you, and I will someday in the future! I’m thinking about these topics: SwiftUI app architecture, drawing using SwiftUI (like that chart), managing app (or view) state, Core Data and Swift UI, network requests using Combine and SwiftUI. If you want me to cover one of these topics or something else first, please let me know in the comments below or on Twitter.

Introducing Courset

It’s been a very long ride to this point but finally my next project is available for everyone!

Courset’s aim is to help you to manage different classes that you or your kids visit. Moreover, it helps you keep track of all memberships in these classes, helping you understand how much time or classes left until you have to prolong the course. If you’re a tutor, Courset can help you plan schedules for your groups or individual students. For more information about the app itself and how it can simplify your life please proceed to the official page.

The original idea came to me in late 2018. Since then I was trying to figure out features that it needs, the way it’s going to look, and the overall plan of development. I even tried to actually build it several times, and I renamed the app two times! And now, to help me be more consistent with iOS app development and with frequency of updates for my apps, I decided to release the app sooner and then get it to version 1.0 with regular updates.

It’s in somewhat early access now (current version is 0.1), so you can touch it and try it on your life and tell me what would you like to see. I really love and appreciate all the feedback that you give about my apps. Courset is available now for iPhones running iOS 13.4 and later. Remember that although I test every version before release very carefully, feature-wise it’s not a finished product, so some key functionality is unavailable for now. In the upcoming months Courset is going to get better and better, so now it’s a great time for your valued feedback.

Timerange 4.1 Update Released

It was pretty challenging to make an old project like Timerange look good in dark mode, but thanks to ability to define color sets in .xcassets files and dynamic colors like systemBackground it became a routine after a little while 🙂 It’s nice to see how Apple gives you as many things as they can so you can adopt new iOS technologies faster.

I’ve also fixed a lot of little bugs here and there, while also trying to make version release process easier and faster. One of the most tedious parts of it is of course making screenshots for every single required screen size and language. You can easily make a mistake here and then a set of screenshots for one screen will look different than for other screens. This time I tried to make it simpler for me by using fastlane. Their snapshot tool automates screenshotting using UI tests that you can write. The best source of knowledge about UI tests that I could find is this video from WWDC 2015, highly recommend. Unfortunately, some parts of Timerange like time range selector (yes, class that allows you to enter a number of days, weeks, months and years is called TimerangeSelector) are so old I couldn’t make it work with UI tests without rewriting the way it’s initialised, and I didn’t want to move my release date this time (I have a new app to make. More about that soon). So as before, I made screenshots manually, but this time also framed it using, well, frameit, fastlane’s tool for adding device frames and text to screenshots. I’ve also refreshed the app’s icon, made a little video showcasing main features and changed a lot in keywords, so yeah, you can call it a pretty serious App Store Optimization! 🙂 We’ll see how it pays off in the near future.

So that’s how’s it going with Timerange. My next project is being written entirely using SwiftUI framework and so far I love it! More on that later.

Full changelog is below:

This update brings you dark mode for iOS 13 and fresh new app icon! Also in this update:

  • Fixed sometimes incorrect calculation of the number of working and non-working days between dates.
  • Improved notifications planning algorithm for time counters. Now even if you change your time zone often, notification will be received after specified amount of time.
  • Fixed app crash when tapping on “Event in Calendar” button, if access to Calendar is denied.
  • Many more little fixes throughout the whole app and on the widget.

Timerange 4.0.6 update released

Fixed a problem with the Counters widget that everybody had and experimented with some new stuff for me: Dynamic Type. Awesome feature that enabled the support for Larger Text at every screen of my app. I know a few people who use Larger Text on their iPhones, so I think there are a lot of users whom this feature might help.

In order to use Dynamic Type, you have to use text styles in IB and code, so for example you now have to use UIFont.preferredFont(forTextStyle:) instead of UIFont.systemFont(ofSize:). These text styles have predefined size, that also becomes available for user’s control with Larger Text accessibility setting. This forced me to update the way I define fonts everywhere in my app. The result you can see above: all that font thinness that I was using was too old, like iOS 7 style. These days iOS uses bolder fonts, that are actually more readable, and thanks to this change, the interface of Timerange feels fresh!

Full changelog is below:

• Improved typography across all screens to better match latest iOS design trends 
• This also means that all the text in the app is now dynamic! Now, what THIS means?! Timerange now respects Larger Text setting in iOS Accessibility settings, so everything in the app is bigger for you if you use this setting 
• Fixed date inclusion setting not using value from Remembering App State if its corresponding date is not set 
• Fixed Counters widget showing setup tip even if you already have Counters on the widget 
• Fixed some counters incorrectly displaying on Counters screen 

Timerange 4.0.5 update released

Yay! A new Timerange update have just hit the App Store. I changed the order of my releases to have more time for my next big project that I’m going to reveal soon.

Got a job a few years ago so I didn’t have time to keep my apps up-to-date, I’m sorry. But every single purchase of Timerange still means a lot to me, always thought that I should get back to iOS development as soon as possible, so thank you all very much for the support! I hope the app serves you well in your daily routine. Now I’m back, so please welcome Timerange 4.0.5!

This update brings the most important improvement: optimization for the latest screens! Yes, the app looks gorgeous on iPhone X and newer. Also in this update:

• Updated the whole codebase to use the latest internal iOS technologies and prepare the app for more updates in the future. A downside of this is that I had to increase the minimal iOS version to 11. Most of you are already on iOS 11, 12, or even 13, so it doesn’t mean much to you.
• Added more colors to Counters. Let it shine in all of them!
• A lot of little layout improvements across all possible iOS devices.
• Fixed some English and Russian localization issues.
• Visually updated the Counters widget.
• Fixed a crash that occurred when trying to create a calendar event for the calculated date. Didn’t know about this feature, huh? Tap on the result on the first screen of the app, then tap on “Event in Calendar” button. 


Photo by ros dagos on Unsplash

Hey, everyone! I’m still alive, yeah.

It’s been a long time since the last post here. In 2016 when I released latest update for Timerange, I got a job and since then I have been working for 2 years on a big ass project for Web. Last year I’ve started streaming videogames on Twitch, and 2 months ago launched a new website,, with a little drafting tool that should help people who often play Overwatch with friends against each other or host tournaments. I’ve built it using a PHP framework called Laravel, React + Redux on front-end and Node.js for the drafting process. The app looks good on mobile, as well as desktop.

But I didn’t forget about my iOS past and I always wanted to return with some good new ideas because #ILoveSwift. Finally one brilliant idea hit my head so now I’m recovering my Swift knowledge to build a new app for iOS. I’ll make a post with its announcement when the app will be nearly done, so stay tuned!

Also, my main iOS app right now, Timerange, was in need of an update for too long. Right now my new app is top priority, but right after the release I’m going to make Timerange shine on new iOS screens (iPhone X and newer), while fixing some bugs reported by you. Thank you for all the feedback about Timerange, I was reading all the mail :>

Also, I may write some new tutorial articles in the future about my new Overwatch Drafting tool or programming for iOS using Swift, so if you’d like to read about a specific topic, feel free to let me know in the comments below or @ me on Twitter.

So let’s return to iOS! Thank you for using my apps all that time I’ve been gone. Don’t forget to follow me on Twitter to get all the news first (especially that sweet little announcement coming in soon).

How to Set up Visual Studio Code for Web Development in Golang. Part 2: Front End

In this article we’ll talk about the front end part of our set up. I use Gulp as a build system for my project, but I think this set up can be done with any other build system as well. This was originally an article about setting up Golang & Angular 2 development, but it actually doesn’t use Angular in any way. The only thing you need here is a build system (Gulp, Webpack or something else). (more…)

How to Set up Visual Studio Code for Web Development in Golang. Part 1: Back End


So, I’ve completed setting up my Visual Studio Code to develop a site using Go and Angular 2 and I thought that this information may be useful for somebody.

In the first part of the article we’ll set up our back end, and the front end we’ll set up in the second part. (more…)