While working on a project for one of my customers, I’ve decided to amuse myself riding my very own wooden roller coaster, again.

There was ups and downs on the path (of course), but I’m satisfied with the result I’ve been able to achieve, despite the struggling.

This is also the experience I’ve had using Open Source Software, which is not entirely new.  But I think that I’ve made progress towards acceptance and engagement. I’m letting it go away and ask for help more often, which is better than struggling with my emotions.

So, following is a rather incomplete list of libraries, help resources and modules I’ve been using to meet our needs to build an Android and iOS app.

ReactXP

I chose to embrace Microsoft’s ReactXP because it allows me to create value rapidly, as I’ve publicly talked about.

I have to confess that I mostly worked with the react native (iOS/Android) side of things from now on, though.

I could have use typescript with react native but, I did not wanted to close doors on me. This is not because I’ve delivered only mobile apps right now that I could not offer a web or Windows/Mac one from the same code base. I probably could and will when/if it makes sense.

Stackoverflow

Yes stackoverflow.com is part of my toolbox, and I’m using it on a daily basis.

Whenever I’m stuck learning a new thing, I go to Stackoverflow to find answers and ask for help when I need it. You should do that very often, do be afraid to ask, especially when you’re working remotely as I am, you’ll save a lot of your precious time and feel less alone. On this particular project, the community helped me on the following three topics

Animations

I’m no UI expert and I find it hard to use animations. The idea was to animate an emoji or text around a circle path. You can do that.

Bluetooth

Working with bluetooth at high speed is one of those weird moment when everything seems to fall apart, and as a software architect, you began to feel the impostor syndrome.

I’m using react-native-ble-plx which suffers from backpressure support on Android by default. iOS seems to not be affected. That was a problem because the Javascript side had trouble keeping up to the speed on relatively low end devices. So I asked where and how to implement backpressure as a hotfix.

RxJS

Finally, because I’m sending back data to a native C++ cross platform layer, I had to understand how RxJs works with async functions.

Native modules

I used a lot of react native native modules in this project:

react-native-ble-plx: handles bluetooth communications (see above).
react-native-charts-wrapper: Beautiful charts
react-native-device-info: Used mostly to identify devices and construct unique file names.
react-native-keep-awake: Prevent the device screen going to power save mode during data capture.
react-native-splash-screen: Well you know what it means, right?
rn-fetch-blob: Used to save data to internal storage.

C++ cross platform bridge

Again I’ve used djinni-react-native to generate boilerplate bridge code between react-native and C++ cross platform native code.

Phones

I’m using a moto E4 Plus and a Redmi Note 6 Pro for Android. For iOS I have an iPhone 6. I’m not working with emulators at all. In fact I never have. This is mainly because I always had to access the hardware (Bluetooth, or camera).

We faced bluetooth problems with Huawei devices not working at all with our bluetooth source when receiving data at 200Hz. It works at 50Hz though. My phones are working pretty well whatever the rate.

AppCenter

My platform of choice for building code and publishing mobile apps to stores and or testers.

I had some problems building for iOS because of a bug in the tool thinking I was using Cocoa Pods, but I don’t, not anymore. I solved it by uninstalling CocoaPods right after cloning the source repository. Weird but it solved my problem.


That’s it for now. Thanks for reading.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.