Mac is back.

Sunday, June 16, 2019

I have created my first web page, and, later my first program on the Mac, and now supporting my family working on the Mac. Even though I owned a PC before, Mac always going to be my first true computer. Computer which empowered, and gave me a choice to be someone I want to be. You see when I’m going with this. You can’t forget your first experiences.

Now-days I have much less time for myself than I did before. Much less, if almost none, when I am not careful. That’s why I have to spend my time well, I can’t afford any kind of compromise, I need the best and most powerful computer and software I can get. Recently I’ve been trying spend as much time with Mac as I can, perfecting my setup and learning new automation tricks. I feel like with Mac I can create with my maximum potential.

I cheered to meet new Mac Pro tower when it was unveiled at the Apple WWDC. Brutal and powerful, driven by its function. A perfect masterpiece, a culmination what personal computer can be at its extreme potential. This shows that Apple still cares about Mac platform, and all weird edge cases and needs some of us have. Apple still working hard, not just for its most popular markets, but also for individuals who would benefit from maximum computing power.

I don’t even need all this power, and certainly we can’t afford it. However I am glad Mac Pro is back, in its new compromise-free classic tower form. Mac Pro is my favourite Mac I never owned, because even idea of its existence gives my live reassurance in our bright future of personal computing. Everything Apple learned building Mac Pro will benefit next generations iMac Pro, Mac mini, and MacBook Pro.

Why I Value Native Software.

Saturday, June 15, 2019

When the original iPhone OS was introduced, many people loved it, and many developers wanted to be on the platform. iPhone OS 1 had break through Safari browser and Steve Jobs implied that third party developers could use power of WebKit to build and distribute their applications. However they were never “first class” applications. Apple didn’t use HTML, CSS and JavaScript for their own apps.

With iPhone OS 2 and iPhone 3G, Apple opened up some of their internal frameworks, like UIKit and Foundation for any third party developers. Now you can run applications which can compete with software developed in Apple itself. Like we always could do it with AppKit on Mac. It was the right and very successful decision.

During my software engineering career I preferred and prefer to use the same tools and technologies available to the OS vendor. It feels more fun to me, I tend to want more control over software I build. I value freedom in power to express any kind of idea, and I do not tolerate any kind of performance cost or compromise in user experience. I never cared about building something which is available to the largest group of people possible, but I always wanted to build the best kind of experience possible, and, most important, to deliver experiences which is better than alternatives. That’s a corner stone of my personal race to success, be better than others. Be different.

Apple Watch Generation 1 Review.

Monday, May 27, 2019

Apple Watch with UTILITY face.

In 2016 Apple released Apple Watch Series 1. I still wear them to this day, even at night. Here’s how this little computer improves my daily live.

Telling Time and Counting Seconds.

I love to wear a watch. I find analogue watch faces relaxing and much easier to scan than digital faces.

For the 60, 30 seconds timers, I look at my wrist and memorise Seconds Hand position. Two, three glances, and I’m done. I don’t need to launch the Timer app.

This also works with traditional mechanical watches and even with iOS Springboard. It’s very Apple-like thing, when you look at your iPhone, iPad, or Apple Watch with the Seconds Hand perfectly in sync rotating smoothly.

iMessage and Telegram Notifications.

Because I sometimes leave my iPhone behind, there’s always a risk to miss an important message from people I know. Both of this apps value my privacy and allow to reply right from the Apple Watch.

Breath App.

Such a wonderful lightweight app. I try to use Breath as much as I can. We even use it together with my son, it helps me to relax and it helps him to fall asleep sometimes.

Siri and Dictation.

It’s not the fastest device to access Siri, but it is much better than nothing, and it is always with me. I use it to text my wife, set reminders and add new items to OmniFocus.

Battery Complication.

The battery in my unit is old, so I have to charge it at least 2-3 times a day for at least 15-30 minutes at a time.

Sleep Tacking and Caffeine Logging.

My favourite thing about AutoSleep is that it works automatically and doesn’t require me to launch the app. When I do launch it, I find it a bit over-engineered.

For caffeine tracking, I have created Caffeine++. I use it every day. I find it fast and convenient.

UserDefaults In Practice. 🔗

Sunday, April 21, 2019

My favourite UserDefaults1 use-case is preserving User Interface states, one of essential items on the list of every good Mac and iOS application.

UserDefaults is one of most powerful examples why I love writing programms for Apple hardware. It is easy to get started, performant, and got even simpler2 over time. Just two-three lines of code and you wrote something to permanent storage. Which you can read at any time, so efficient, adding your own caching code would even hurt performance3.

David Smith wrote an excellent guide to UserDefaults for DS Coder. I have learned something new from the article:

Having an alternate code path for “no value set” is also generally unnecessary, as you can provide a default value instead.

Thank you David, for this excellent guide.

  1. Ommitting NS prefix, it doesn’t exist in Swift. 

  2. There’s no need to call synchronize() method any more. 

  3. UserDefaults optimised for reading. 

How to Get Bugs Fixed by Apple. 🔗

Saturday, April 13, 2019

Greg Scown, writing for Code Cook Read:

First and foremost, write good bugs. This is fairly easy to do, though it can be time-consuming. If you’re not already familiar with that’s the site for reporting bugs to Apple. When you create a new bug, Apple includes a template in the description for exactly how they want you to report your bug. Apple isn’t looking for you to create your own format or to report things entirely in prose. They also include a handy page of tips for reporting bugs which you should follow.

Greg’s article inspires to do a better job reporting bugs to Apple. Reducing the scope, if possible, and reading Apple manual is 2 excellent take aways. Whenever I get a reply on a bug, it’s usually asking for sysdiagnose report with PDF manual attached. I had no idea that yo can get all manuals in advance from the Apple tips page. Let’s write better bug reports, targeted to the cause and with as much information attached as possible.

Apple’s Game Changer. 🔗

Thursday, April 11, 2019

We all want Apple to buy Nintendo. But now it makes sense.

It doesn’t make sense. Nintendo is a hardware company as much as they are software company. Games published by Nintendo always released for a single platform, with physical controller included, while Apple Arcade is more about simpler games which can ran on multiple devices with or without a controller. Nintendo makes profit from every console they sell, not just games. And games they made take full advantage of hardware. Their hardware doesn’t need to be an everyday computer and can cost less, lowering entry barrier. Nintendo 2DS costs $80, Apple will never make an iOS device so cheap.

What really makes sense is Nintendo mobile games on Apple Arcade. Apple doesn’t need to buy Nintendo to make this happen. Super Mario Run playable without internet connection, that’s what we need.

Preventing RSI.

Wednesday, April 10, 2019

Why Now?

RSI1 is not a new issue, why I am writing about this now?

  1. Larger smartphone screen sizes.
  2. People love to spend time with Nintendo Switch.
  3. Many people started to use iPad as their primary computer.
  4. Apple introduced low travel keyboards in their laptops.

We use iPhone a lot. Larger touch screens force your fingers to stretch and work more in unnatural ways.

The Switch allows you to take one of the best games ever made with you, but it’s heavy and Joy-Con controls are tiny, if you have moderate or large hands, your fingers are crippled.

Like laptops introduced new ergonomic challenges, iPad introduces even more challenges, when working for an extended period time, we use elevation docks, external screens. iPad can be used in many more new ways and it’s your job to take care of your body, maintaining natural wrist position and healthy posture.

Not everything that happened brings more risks to your hands, there’s positive changes, like ever reducing keyboard travel time. I have a theory that newer quieter keyboards are ergonomically safer.

New thinner MacBook Pro/Air keyboards are not reliable, Apple gets a lot of criticism and rightfully so. However, smaller travel means that your hands have to do less work to press each key. RSI caused by micro injuries in hand muscles. More travel means more force. Each individual press is harmless, but when repeating it thousands times, it can accumulate to a big amount of force which your hands have to deal with. Loud typists are at greater risk, and new keyboard are all about quieter typing.


  1. Choose a smartphone with a small screen.
  2. Use large Pro Controller, give your Switch support while playing, reduce wrist strain.
  3. Use external keyboard and stands when working on iPad.
  4. Consider keyboards with lower travel time.

Also there’s some simple rules.

  • Type as light and quite as you can.
  • Move and shift your entire hands and shoulders.
  • Don’t rest your wrists while typing.
  • Don’t stretch your finger in unnatural positions while typing.
  • Use stronger fingers more, press larger keys with multiple fingers to reduce required force.
  • Position your keyboard flat.
  • Give your hands and body regular breaks.

Wrapping Up.

The most desired scenario is when you treat your hands with respect and don’t injure yourself in a first place. That’s the easier and healthier option. I am fortunate to have heathy hands so far, however I had experienced warning signs and I have not ignored them since. I am careful about my hands, particularly, how do I type and play. You should be to. There’s many kinds of RSI, but the one I am concerned the most is the one which injures you wrists to a point that you can’t type without a pain or can’t type and play any more at all. The only cure is time and full recovery is not guaranteed.

We don’t speak about RSI enough. It’s a life injury and it’s happening around us. Normally, only people who already experienced RSI taking measures and talking about it,2 while what everyone in software industry should do more, is to take preventing measures. I am calling for more RSI awareness among people in software.

Further Reading.

I recommend this book (Amazon), which is only available in print. Used price is not bad at all. If you know me in person, I will happily let you borrow it.

  1. Repetitive Strain Injury 

  2. I’ve heard this from John Siracusa and some of members. 

Ego-free UX. 🔗

Friday, April 5, 2019

Despite clickbaitish title, I cannot empasize this enough.

Running 1Password 7 in Stand-alone Vault Mode.

Monday, February 18, 2019

Be warned.

Having lived with this setup, I found out that I have to perform this steps every time the app is updated. I also have to disable Safari extension.

1Password 7 and local mode.

Although I’m paying for 1Password Family Subscription, I was experimenting with ways to run it locally. It wasn’t obvious but I got it into stand-alone mode accidentally after restoring from backup.

It’s easy with 1Password 6.

  1. Buy the app.
  2. Disable iCloud sync.
  3. Create a local vault and use it.

With 1Password 7 subscription model you can download the app for free but in order to use it, you have to sign-in into your 1Password account. After that, you can create a vault outside of your cloud managed account but you’l still have a local copy of all of your 1Password account items. You can hide cloud vaults, but there’s no obvious way to sign-out and stop 1Password 7 from fetching your data from the cloud.

How to run 1Password 7 in local mode.

You will need a 1Password backup file. I have tested this with 1Password 7 and 6 backups.

  1. Download 1Password 7 from Mac App Store or AgileBits website.
  2. Sign-in into your 1Password account.
  3. Open 1Password 7 > Preferences… > Advanced and enable local vaults.
  4. Click File > Restore… > Find Backup.
  5. Find it and click Add Backup.
  6. Select a backup and click Restore.

This will prompt a warning that all your local data is going to be replaced. If you restore, 1Password quits itself and you will have only the vault from your backup. 1Password account is gone for good. You will have only 1 vault and it would look like you have signed out.

Don’t forget to backup.

1Password makes automatic backups but it’s your duty to copy them to some place which is not your Mac. Time Machine can do it automatically.

It's Four of Us Now.

Friday, September 28, 2018

Svetlana and Victoria. Asian women holding a baby.

It’s four of us now, welcome new family member — Victoria. She was born recently, her mom went through gigantic challenge and it’s still very hard work for us, now with two kids in the house. Trying to shoot more videos, I will never forget this moments. Spending more time with my son Steven.
Best holiday I ever had.

Returning to Azeroth.

Tuesday, September 4, 2018

Night Elf waiting for a dungeon party near the Meeting stone.

It’s impossible to experience all the story at this point, since 2004 US release there were 7 expansions, history of the world changed a lot, you had to be there from the beginning. But not all is lost, there’s time walking events, there’s books and graphic novels. So much story can be overwhelming, so I recommend taking advantage of “Class Trials”, you can start playing at level 110. Choose your character — Honourable Horde or Righteous Alliance member, or maybe, neutral Pandaren and jump into this huge world with million of others. It feels like you part of something big.

I still remember the day when I picked my World of Warcraft box. The box felt good, thick, with colourful illustrations and beautiful characters. But that wasn’t the reason I decided to buy the original game, I only picked it up because of familiar and friendly Mac log on front. Blizzard still supports Mac and even Metal 2, so it won’t be affected with deprecation of OpenGL. Even though it’s very old game, you will be pleased with level of details in a new areas. I play on my 13-inch MacBook Pro and I get ~30-50 FPS with low graphics but native Retina resolution. Text is so sharp in quest descriptions.

How game changed since beginning? There’s a trend to make it more approachable, you don’t need to learn a lot and you don’t need to invest huge portions of time, completing single quest can take you 5 minutes. It’s genius how questing is used to advance your character and give you motivation to explore new areas. There’s always something to do, dwellers to help. It’s a very smooth experience, it gives you bits of story and landmarks peace by peace, it’s addicting and rewarding. No commitments at all. It can be a pleasant routine, an escape into different world.

There’s 2 phases — levelling and the end game. Anyone will tell you that the end game is the most fun part, but for me questing and small dungeons always were more than enough. I never even got to the end game. When Battle for Azeroth was released, I subscribed again, this time I will try to reach the end game.

There’s interesting accident happened in the game called Corrupted Blood plague which simulated chaotic deceases outbreaks from real world. It’s even studied by scientists.

How iOS Developers Lie with Photo Permissions Dialog.

Sunday, July 15, 2018

Telegram requires access to photo library to change profile picture

If you try to change your profile picture on Telegram, it’ll demand access to your entire photo library. Telegram doesn’t need it. System image picker doesn’t need user permission! But many developers intentionally lie to us, so we would think we have to give a permission. In fact permission is only needed to add new image to the library, or for custom picker UI or if you want upload all of your pictures.

Since very beginning iOS allows user to select any photo with sandboxed image picker. The app sees the only photo you picked, and you can browse through your library in private and familiar way, without leaving the app. However even apps which use system image picker ask photos permission. Is it laziness or ignorance?

Did it happened to you? You wanted to changed profile picture, or selling something and attaching a photo. You can do this easy on the web but if you use iPhone or iPad app, you have to give full access to your media. With this access app can easily upload all your photos, GPS coordinates history, or even analyse all your photos with machine learning. I’m worried about potential privacy disaster which can come at any moment now.

Not only it’s unnecessary extra step, but also often users need to navigate through custom buggy UI.

I’ve build simple proof of concept to demonstrate that native UIImagePicker can work without your permission, your photos won’t be accessible to the app.

I’ve tested it on device because I can’t believe that so many developers ask photos permission not in the right moment. Yes, you can ask me if I try to save a photo but you can’t do it when you trying to show UIImagePicker.

Go through all your apps in Settings > Privacy and disable everything you can. Often you can still get things done by pasting an image, but sometimes the only private way is using Safari.

← Newer Page 1 of 8