Skip to content

optixx Posts

SnapClipp

8 Years ago when the App Store for MacOS Apps was quite new i develop a little utility app for managing clipboard contents. The app was definitely inspired by Linux apps that i used all the time and was i really missing such a tool on MacOS.

For me it was the first time writing an OSX App using Objective-c. Took me a couple of weeks to get everything working how i wanted it. I went all in and setup an Twitter account and Blog for it to do some Marketing. Some i had the crazy to ask money for the app 🙂 And it never took off, i have maybe sold 50 Apps. After a year the Apple developer account subscription ran out. Which i never renewed and so the app got removed form the AppStore. But i also kept using the tool and i gave to co-workers in my company.

Recently i was approached by our marketing team if we could release the app and add a Userlike branding to it, so we can use it as a free download in a blog article, which seems to be a interesting thing to try out.

For me it was interesting to revisit this project after 8 years and make it work on Mojave and Xcode 10.3. First of all i have to say it took me like 5 minutes to get back into Xcode. I mean they must have added quite a lot of features to it over the the years but still it feels and works the same.

To make it compile, I had to fix a couple of build settings regarding OS versions and arch. I did re-build of one external framework that i was unable to link with current Mojave built app. To make the app ready for a release i re-branded it to look like Userlike tool.

It took me a couple of hours to make this app release ready again. I spent the most time to enroll into the developer program, where i was struggling with the DUNS number for my company, that includes non roman characters which are not allowed for the company name in the Apple developer program signup form. So I had to go thru the customer support to sort that out.

Leave a Comment

Positive Grid Bias FX Review

I have been using Bias FX for over 3 years now. I always likes the visual approach of the prodcut and i think they deliver a good sounding plugins for hobbist guitar players like me.

I started using Bias FX Standard Version after seeing postive Youtube reviews. Over the time i upgraded to the Professioal Version because often i got stuck trying to use a preset from the Tone Cloud that wouldn’t load without having e.g. the Professional Version. I also bought two more Expansion packs because i still kept running into problems when trying out downloaded presets. I don’t remember the exact number, but I estimate that I already spent like 200 Euros for upgrades and extension packs. During that process i also tried Bias AMP 1 and later i upgraded to Bias AMP 2. And now iam struggling to do the upgrade to Bias FX 2 since i feel a little bit brunt by Postive Grid Software quality and upselling strategies over the last 2-3 years.

Lets talk a bot about software quality now. I collected a couple things i experienced using Postive Grid products over the years.

  • UI Inconsistencies: I have used 4 major Bias Products and all do commong stuff like login popups, audio settings differently. Always changing UI elements, slightly improving stuff but not back porting fixes and improvements to older version of the product.
  • Broken UI: I have used a couple of version of Bias FX that were broken. It was not possible to use the text paste function during the login popup, which is a major annoyance if you use long random passwords with password manager. The worst version i had once, would just crash if would use the paste function on the password input field.
  • Postive Grid updates all their products regulary, mostly updating the core sound eingine. But after each update (which does not use an autoupdater), you need to re-login to your account to access the license settings and use the Tone Cloud. I think this could be dont better and let the user not re-login everytime after each software update. So everytime you start your DAW you end up typing in passwords for you plugins before you can start to work.
  • Aparently the Tone Cloud UI is added via webviews and the overall experience feels a bit hacked together when related to the App native crossplatform UI toolkit. I guess it should be possbile to develop the whole UI of the app and the online components in one native webcontainer and let the rest to done by the native audio core that probably written in C++.
  • While using the Tone Cloud you can preview all presets, dispite the constraint if you actually entitled to use them regarding app version and extensions packs. So after previewing and installing presets you will get feedback if you return to the main app once you want to active the preset where you end up getting and upgrade nag screen.
  • The whole Midi integration feels hacked together, there 2-3 UI approaches how to assign Midi Commands to different function of your stack, which can be quite cumbersomne if try to setup a more complex setup and try to sort out conflicts.

Overall considering Postive Grids upselling tactics, that the prodcut is fragmented in a way that usage feels like using a crippleware and their permament marketing push, offering deals on their website, gives me the impression they either don’t have great trust in their product or they haven’t found the right market fit. In way they should try to deliver a good product that customers are happy to pay a one time payement, and if this is sustainable for them they should consider migrating to a SaaS model. But this feature limitations and upselling tactics are annoying for a power user.

So in the future i stick to smaller plugins that don’t implement this permanent upgrade pressure.

Leave a Comment

Update about my company

Its been a while since I blogged about the development of my company Userlike that I co-founded in 2011. Last update was 2 years ago

As you might expect running a company needs a lot of time and energy. So my left free time is mostly reserved for my family and social activities. You could say that free time for my hobbies became a rare thing. The last couple of years I saw a definite shift that I tend to spent more time on not computer related stuff during my free time. Lately I spent more time playing the guitar, re-booting an old hobby of mine. Actually this one involved also a bit computer work, since I figured I need to build my own Midi Controller for my amp modelling software.

Between Christmas and New Years I went on a vaction where I got some unexpected free afternoons on my hand, and I felt the itch to look into my old console projects I had been working. I re-booted some old PSP code, for which I used to development a couple of projects. I started writing an amiga style intro. I re-used some old Future Composer player routine that I ported ages ago to the PSP. Revisiting PSP development, brought some nice changes.You can run your toolchain in a docker image, which makes cross development easier.

Getting back to initial topic of this blog post. A big step for the company’s development was our move into a new office space. We grew out the old 120 square meter office space. The last couple of month in that space we were using the officw with up to 14 people in 3 rooms. That demanded a lot of discipline and smart approach to our work schedule. But we survived it 🙂

Peter & Jörn

Office with a view

Finally we found a nice office space not to far away from the old office, still very close to the center of cologne. Everything is in 10 minutes walking disctance, eihter to the main station or into the center of the city.
The office is bit over 400 square meetinfs consisting of 5 rooms. Three big open space loft offices, a meeting room, a lounge area and a kitchen.

After we moved in and exchanged all our office furniture, we gave our office a new look with the help of Grafit. The office make over was celebrated at our Summer party.

Like switching office we also replaced our website, multiple time. When we moved in the old office the website looked kind of like this.

Our old website like 4 years ago from 2015 And we transitioned to a new style. Next version website from 2017

And right we are in the process of releasing a new website again. Latest version website from 2019 Latest version website from 2019 Latest version website from 2019

Its been a crazy time developing the company. Our headcount grew from around 15 people working at the old Userlike office to arround 40 people today. My development team grew from a 3 people (including me) to 10 developers.

Which also means a shift in my line of work, that I transitioned coding to managing a team. It’s been challeging 2 years for me because we mostly grew the development team to build a new big iteration of our product.

We are changing couple of components in our current stack. First we unify our operator and user facing chat application to one code base using React. Also we are throwing out XMPP as our main message broker, and switching to a custom component, that is part of our new chat server. We switched to Python with Greenlets and giving up node.js. These steps help us to share code between our apps and also reduce also the distributed state handling between application, since we have less “moving parts” in our stack. Its been a rough start. Because we didn’t realise in the beginning, that most of our problems were related to our internal protocol shortcomings and complex state handling. Once we addressed this by developing a new chat server with a new protocol, things picked up very quickly. Looking forward to release the first iteration of the product.

The new production iteration will open us a lot of new usages of our chat application. Despite an new look and improved UX, the biggest conceptional switch for us is to leave the online/offline paradigma of live chat and transition to a sync/async paradigma of a messaging application. This will improve our messenger integrations like Telegram, Facebook and WhatsApp.

We had 2 strong years of growing our product and customer base, we have a stronghold in the German market and were able to subscribe a couple of enterprise customer which we could attract with a strong product, professional onboarding services and custom integrations as well as custom tailored solution like chat bot integrations.

Looking forward to a successful 2019.

Leave a Comment

Fun with Midi Pedals

I rediscovered my hobby playing the guitar in the last years. It was interesting to see the big changes that happened in the last 20 years in guitar amplification technology. In the 90ies i used to play my guitar with a couple of stompboxes into a huge 100 watt tube head with a 4×12 cabinet. Very loud and heavy stuff. Today there are many new options, especially when you are into computer stuff. So amp modeling on the computer is a thing. This might not be rock solid setups for on stage performance. And sure i like to play my Marshall DSL straight with a Tubescreamer in front and delay pedal in the FX loop. Great sound. But the stuff you can do with amp modeling on the computer is really fantastic.

Bias FX Bias FX

Bias FX

At some point i settled on Bias FX from Positive Grid, because its just does everything i need. I use it as standalone and in Logic Pro as a plugin and also on my iPad. I use Bias Amp 2 with gives even more option playing with the parameters in in your amp. You can basically change each aspect of your amp, like preamp tubes, power tubess, the transformer, voicing stack and finally your IR for cab simulation.

Bias AMP Preamp Transformer

I sometimes get a bit frustrated with the code quality of Positive Grid products. The frontend parts tends to be a bit buggy, like crashes when you paste a password in Tone Cloud login screen, stupid stuff like this. The UI consistency between their products is not great either. But on the positive side, you can try out so many different tones in Bias FX, using different pedals, setup stereo stacks or play with IRs. So you can basically try out tones that usually not possible to achieve, because it not feasble to aquire so many different pedals and amps, to get that certain tone. You want to sound like Metalica on Ride the Lighting, just login to Tone Cloud where you can download all kinds of community driven tones, there you will find a preset.

What i dislike with, that i often feel interrupted from playing because i have to grab the mouse and tweak some settings or toggle a pedal. Not really a relaxed playing position while cramped in front of a computer. For me that stands a bit in the way of playing. I figured it would be nice to have a foot controller for my amp modeling setup. I knew Bias FX supports Midi, so i got into Midi controllers.

Behringer FCB1010

Behringer FCB1010

After some research i went with the Behringer FCB1010 and the UNO firmware, it seemed so have all the features i needed and looked highly customisable.

Midi Monitor

I tought i will spent just a couple of minutes to connect to my Audio Interface and setup some “midi commands” in Bias FX. Man was i wrong…It was not that easy. I had to get my hands dirty and understand Midi basics. I used the Midi Montor to see whats was going on the wire.

Since my footcontroller came with the UNO firmware, which support the concept of stompbox in patches i was looking into that feature to get it working with Bias FX. So the idea is to have 5 different patches on the lower switch row. Pressing switch 1 will trigger a patch change e.g. “Dist Rythm”. The foot controller sends a Progamm Change(PC) to Bias FX. Once the patch is active, you can control individual stompboxes within the patch, using the top row of switches. Pressing one of the top row switches will trigger a stompbox toggle by sending a Control Change Messages (CC) to Bias FX. Here is a example patch and stompbox config.

Patch Name PC
1 Dist Rythm 1
2 Dist Lead 2
3 Clean Picking 3
4 Clean Chorus 4
5 Clean Lead 5
Stombox Name CC
1 Boost/Dist 51
2 Mod 52
3 Delay 53
4 Reverb 54
5 Misc 55

So my plan was to configure 5-10 patches with 5 stompboxes each. I also wanted to add support for the expression paddles on thefoot controller. That i can map one CC for Wah-Wah and a volume pedal. And another CC for the pedal value. Put the foot controller in programming mode, then you would be doing some crazy “River Dance” style pattern tapping on the switches to get all the patches setup. That was not my cup of tea, too lazy for that. Started to look for a desktops program that would assist me building the config for the foot controller.

UNO Control Center

There is the offical FCB/UNO Control Center that work on OSX, but it was a bit glitchy and unmaintained, there is no 64bit build, which Mojave is starting to complain about. So i was not feeling confident spending 20 Euro on that.

FCB1010 Midi Editor

Spreadsheet View

I ended up using the FCB1010 Midi Editor via Wine.There were some quirks, like that i was not able to persist certain CCs for specific switch, which i could work around. After spending a couple of hours and many config round trips sending SysEx i got the setup working with Bias FX.

But one thing wasn’t working. When selecting a patch, each stompbox would have an inital state. Like patch 1 has the distortion pedal and the delay pedal active, thus the status led of that switched would be on. Which also means that the foot controller send a PC 1 to switch the actual patch in Bias FX and CC 51 and CC 53 to enable the distortion pedal and the delay pedal. But thats not how Bias FX works, if you select that patch in Bias FX the stompboxes are active in the patch. So the footcontroller would actually do the opposite, it would disable the distortion and delay. I tried to mitigate the problem my changing the initial stompbox states in Bias FX, but that was not was i wanted, because i often select the patch via mouse input. It also didn’t work consistently due timing issues. So i needed a feature to enable a new patch that has certain stompboxes active but not triggering the stompboxes CC messages on inital select of that patch. The UNO firmware would not support such.

Time to build my own Midi Controller

I started looking around and found an Midi examples using an Ardunio. I was never a huge fan of Ardunio, didn’t like the IDE and that it tries to hide all technical details from you. But there a lot of easy accessable components and librarys, which will make the project a lot easier for me. I found this Arduino Makefile project, so i could go without the IDE.

Poc

I stared with getting a debug console running and then implemented some midi commands using the midi library. Conntected some the switches and status LEDs to the POC. Added a debounce switch lib to get the switches working properly. Now it was time to write the real program. I came up with a couple of C structs to hold all the patch meta data and states. Finally added a small OLED Display via I2C for status display which patch is active and with stompboxes are selected.

main.ino

Soon i ran into hardware limits. I could only use half of OLED display because if was already out of SRAM on the AVR, and i could already see that i would run out of IO pins, too.

Ardunio Mega

So i switched to Ardunio Mega and 2,2″ QVGA TFT LCD Display. After refactoring the hardware part of the software , i got the the new display working. Time to cleanup the code and throw most of the stuff into a C++ class. I was trying to convert all the config stucts to C++ classes, but then the dynamic character of C++ got into the way and was eating to much memory, so i stayed with the static c structs for the config.

Poc

Downside was the TFT SPI display was a lot slower, too slow infact. Sure it has a lot more pixels to push, but still it was slow as a dog. Initial display code was a bit too simple.

  • Clear the screen
  • Render patch name and state
  • Render all the stompbox names and states

Patch 1

Patch 2

First i tried a different display lib which seems to be faster than the Adafruit_ILI9341 lib. But even with the faster lib, my approach to rendering was not fast enough. So i moved away from full blanking and switched the display code to partials updates.

What now…

The POC phase of the project is done and now its time to build the complete pedal. I need to put everything in a nice case, add all the 10 Momentary Switches and 10 status LEDs. I don’t really need to make PCB, everything can be wired directly to the Ardunio board, there are just a couple of pull ups, that can directly go on the switches. I need to decided how i want to do external power, probably the easiest way to do it, it to give access to the USB port of the Ardunio thru the case and use external a USB power brick. The hardest part right now is to find a nice case for it.

To be continued…

Leave a Comment

Building a Company

Its been some time since I blogged about the development of my company Userlike that I co-founded in 2011. It has been 5 busy years since I last blogged about Userlike.

Since then I haven’t had a lot of time to work on gaming console related hobby projects. (Despite some work on the AspectQt port and a Amiga Intro I made). I hope to find more time to work on new projects. I already have planned to update the quickdev16 software a bit.

It has been an awesome time developing the company. Our headcount grew from 3 people working at Userlike to 20 people today. The customer base grew from a couple of hundreds signups to 30k customer accounts that we are handling right now. 4 Years ago we were more or less working from home office all the time. Then we moved into our first office space in the center of Cologne like 2.5 years ago. This was a huge step for us and moved the company forward. As of today we have already outgrown the office space and started looking for a new and bigger place to call our new home.

Wasn’t slow on the technical side either. I guess its fair to say that we replaced each of our software components at least once by a either re-write or different approach. And still we are refactoring and getting rid of technical debt all the time. On of our most visible components is the chat messenger widget itself, where we are on the 3rd major iteration. Each major version introduction involves a migration phase for our customers. This is always a huge task for the development team, to make the migration smooth as possible while maintaining multiple software versions of the messenger.

Developing a SaaS can be tricky. You always have to balance between customers requests, not falling behind competition and don’t overloading your product with options that hardly anyone is using. The challenge is to find the right compromise, being pragmatic sometimes helps.

Devops side of the project wasn’t less interesting. Last year we switched our datacenter, since we had outgrown our old setup and approach of scaling we went for something new. Now we rely on automatic deployment of our system which we solved with Ansible and are very happy with it. Another big change for our infrastructure was to switch from MySQL to Postgres. The reason for this was quite pragmatic. We used to store all business data in MySQL and stored all bulk data in a mongoDB. Over time and a growing dataset it became clear mongoDB is a hard to handle memory wasting database. So we decided to move to Postgres and merged the mongoDB bulk data using the Postgres JSON type feature. It was quite a task to do the data migration, but since then we never looked back.

We kind of matured the feature set for Userlike over the last 4 years and already branched out into new fields. We started integrating different messenger channels like Telegram and Facebook. Another new development will be to break up the online / offline communication paradigm to a more async and sync communication which will yield to higher usability for professional support teams using Userlike.

Btw, we are hiring and extending our developer team. If you are a python and javascript person, or like building infrastructure, we might have the right job for you.

Leave a Comment

Amiga Cracktro Programming

I held a talk about Amiga Cracktro Programming at the DevHouseFriday 2016-05-13 at Userlike offices. This is the Cracktro i programmed for this talk. I went for some classic effects

  • Logo with wobble effect
  • Horizontal rasterbars
  • 2 pixel sincescroller
  • Mirror and water effect
  • Starfield
  • Futurecomposer chiptune

You can find the slides of the talk here.

Leave a Comment

AspeQt for OS X El Capitan

I updated and compiled AspeQt with QT 5.5.1 and made a build for OS X El Capitan. This has been requested for a while, but i never came around to install latest QT and get it working again. So here we go….

Download for OS X

AspeQt on OS X El Capitan
AspeQt on OS X El Capitan
1 Comment

Bake that Book

Last Summer i gave my old Macbook Pro 15″, Late 2011 with 8GB and 160GB SSD to one of my team members at Userlike, since i got a Retina upgrade. I think the old one was still decent, since the SSD gave it that boost to make it usable, even if the laptop was 2 years old at that time. Unluckily the old Macbook Pro didn’t last long, it just died after 3 month. Wouldn’t turn on anymore. As i predicted, after bringing it to the Apple Store, they said the logic board was fried, which always means its totaled. We bought a new Macbook and moved on.

Now i got the broken Macbook back to my place and i thought i would at least sell the display, case and reuse the SSD. But i remembered reading all the Macbook baking blog articles. I already disassembled a few Macbooks down to the logic board and also did some reflow stuff for side projects. Also knowing that a friend of mine has good experience with baking old Nokia phones, i though i give it a try.

  • Go to ifixt.com and look up the tutorial to change the logic board
  • Disassemble the laptop, collect screws and parts in separate containers
  • Be becareful with all the ribbon cable connectors, there are a lot and some are tricky
  • Get the logic board out, remove heat pipes, ram and speakers
  • Preheat oven to 180c
  • I cleaned the board with isopropyl alcohol
  • Set board on tin foil legs on a baking tray
  • Put in the oven for 7 minutes
  • Let it cool fast at a open window
  • Clean fans and case from the inside
  • Assemble, make sure to get all cables connected
  • Boot that Book

I hoped that i had a 50/50 chance that it will work. I was confident, that i don’t mess the laptop during disassemble and assemble phase, i wasn’t sure what the result was after baking. I remembered that the laptop got quite hot while working, so there were some odds that this permanent heat would have altered the setup of the parts of the pcb. And it turned out to be worth the work, the Macbook booted up nicely.

Get your tools

IMG_2536

IMG_2534

IMG_2537

IMG_2538

IMG_2540

IMG_2543

1 Comment

AspeQt for OSX

2 years ago i started to transfer my old Atari 800 XL software from the 28 years old “5,25 disk to ATR images on my laptop. But i was never happy with the setup using a windows program in a vm to do the transfer. I found AspeQt which is opensource, but it did not support OSX. So i started to add an serial driver with OSX support to it. And then forget about it. Till recently when i got an email from the AspeQt maintainer Ray who asked about the state of my github repo. Since i want OSX support in the mainline, i picked the lastest version of AspeQt to update my repo, which already got a little stale. Then i found out that is a pain in the ass to run QT4.8 on Maverick, there is no offical package and building from source you end up in patch hell.

So i decided to move my branch of AspeQt to QT5.2, which was pretty straight forward.

QtCreator is not a great editor but does the job

QtCreator
QtCreator

AspeQt on OSX

AspeQt on OSX
AspeQt on OSX

Found some cool stuff on my disks

Software from the 80ies
Software from the 80ies
11 Comments

Racing the beam

After reading the book Racing the beam, i felt like trying out to write my own Atari 2600 kernal. This is what i came up with after poking around a little. Sure its a Amiga inspired copper demo.

Screen Shot 2014-01-26 at 17.40.57

Leave a Comment