Mac Multiscreen Stopwatch

An open-source full-screen clock and timer for computers with multiple screens.

I had the requirements to build an application that controls a full-screen clock and timer that is on a second screen. As the timer approaches a particular time, it should change colors as a warning. If the timer goes beyond a particular time, another color should be used.

When the timer is not being used, the current time is displayed.

This is an open-source project, with MIT licensing. The code is on Github.

The font used is available here. It is not required that you install it, but it is a font that looks like an LED 7 segment display.

It will soon be available in the Apple Store to make it easier to install.

There is still plenty of work to be done on it, but it is useful and seems stable. If you like it, please donate using my bitcoin address of 17nfofdYpNNW1KRDRCof8TjhBzvwJ59M8p. QR Code Below:

ToDo Items:

  • Save preferences on exit
  • Provide a toggle that shows the screen numbers, to make it easier to select which screen the timer should display on.
  • Provide settings for font sizes (right now, it attempts to auto calculate)
  • Make timer position configurable.
  • Allow the user to select a font.
  • Allow the user to Cmd-Q to quit the app.

Here is the configuration screen and some details of how to use it:

Screen Number: For a machine with multiple screens, put the number of the screen where you want the full-screen timer to display.

Timer (MM:SS) – Enter the number of minutes and seconds. Note: If you want the timer to go for 15 minutes, simply put 15 in the box (the colon and number of seconds are optional).

Time Left Before Warning – Enter the number of minutes and seconds before the color of the font changes to the color selected in “Foreground Color Warning”. So if you wanted the font to change color 1 minute before the time chosen (i.e. 15 munites), then put a 1 in this box. Once again, seconds are optional. Entering a “1” is the same as entering “1:00”.

Background Color – The color to be used as the background for the full-screen display. To easily select the color, click the “C” button next to the box. Or you can enter RGB values as “rgb(1, 2, 3)”.

Foreground Color Normal – This is the color of the font when the timer is in “normal” mode.

Foreground Color Warning – This is the color of the font when the timer reaches the “Time Left Before Warning”.

Foreground Color Error – This is the color of the font when the timer reaches the full time entered in “Timer (MM:SS)”

The “Start” button starts a new timer. The “Stop” button stops the timer, and the screen changes to the current time. The “Hide” button removes the timer from the display.

Below that is a field that shows what the remote screen is showing. It will either be the timer (if the timer is running) or the clock (if the timer is not running).

+1 for wxWidgets

A simple, unscientific comparison and opinion on Qt vs wxWidgets

I’m not one to care much for front-end programming. Hate is too strong of a word. Dislike is probably the correct degree. I’m a back-end guy. I like the gears and bare metal stuff. I like assembly and low level languages.

So when I can, I pass the front-end work to someone else. They often wrap my code into another language and build something that looks a whole lot better than I would do.

But I have my own projects that need some kind of front-end other than a simple command line interface. So I set out to find a library to help me.

The essence of this project was a simple timer (more like stopwatch) that is to be the only thing displayed on a secondary monitor.

The machine doesn’t have a lot of power, and will be busy doing more important tasks, so the memory and CPU usage must be minimal. That takes Java out of the running.

It must be cross platform, so that gets rid of C# and the other platform specific languages. Yes, I know C# is somewhat cross-platform nowadays. But I don’t want to bloat someone’s Mac or Linux box with a ton of unwanted stuff.

I am a C++ guy. And while I don’t always get the choice, I use it where I can when it makes sense. In this project, it made sense if I could find a way to make the UI cross-platform. Everybody points you to one of two camps. Qt or wxWidgets.

Being that I will own the source, and I don’t mind sharing, the licensing differences didn’t matter much to me. Qt won the Googling war. It seemed that most people talked it up higher than wxWidgets. So I took a stab, and downloaded their libraries and Qt Creator.

I built the app. As it turns out, one of their examples gave me a great springboard for what I wanted to do. When it was near complete, I was pleased.

So why not take a look at wxWidgets? With Qt fresh in my mind, it would be great to give it a shot and do a sort of apples to apples comparison. I downloaded the library, and learned how to wire it in to xcode. That wasn’t too hard. I threw together a wxWidgets Hello World, and it worked. That’s nice. No big download. I can use a familiar IDE. Those are big plusses to me. That means the library is better at standing on its own.

But the big win for me was that the final source code of the wxWidgets version of my stopwatch/timer had a sensible code structure and hardly any macros or typedefs within it. The event mechanisms were a good take on the way it is done in Visual C++, and were therefore familiar to me.

So in my book, wxWidgets won. Qt was removed from my development machine to regain the disk space.

Did I hate Qt? No. It worked well, and Qt Creator wasn’t bad. The online community is strong, and I did not find any area where I could not find an answer to my question.

Is wxWidgets perfect? No. I did not feel that the community was as large as Qt. And I ran into a few documentation glitches. And while I wouldn’t fret about taking on a project that was tied to Qt, I’ll be using wxWidgets on my own C++ front-end projects for the time being.

As always, YMMV.

Where does the CryptoCurrencyExchangeConnector fit?

Who is most likely going to use the CryptoCurrencyExchangeConnector?

Your computer has the ability to talk to several brands and models of printers, right? So why shouldn’t your trading platform be able to talk to more than one exchange?

Trading Platform Developers

This open source project will provide a critical middleware piece to software that wants to connect to bitcoin and altcoin exchanges. Software developers who wish to connect their front-ends to an exchange can use the CryptoCurrencyExchangeConnector, and they gain the benefit of connecting to many exchanges instead of just one.

The DIY developer

Do you want your arbitrage idea to come to life? Why not let someone else handle all the connectivity issues with the exchanges?

Institutions

The larger institutions have their own staff of programmers. But the “buy vs. build” scenario still comes up. It sometimes makes financial sense (and cents) to look at existing solutions.

Is it needed?

Does the world need my product? I am about to find out…

I have had ideas bouncing in my head since I started programming. Some of them hairbrained, I’ll admit. But this one keeps bubbling to the top. And its time has come. If I don’t do this, someone else will. In some instances, some already have.

So why write something that someone has already written? Ask the makers of Gimp, Apache, Linux, and if you can find him/her: bitcoin.

What I am proposing is an open sourced piece of middleware that provides connectivity to many of the different bitcoin and altcoin exchanges. I know I need it for my projects, and I think others need it to. So here’s the SWOT:

Situation:

There are many bitcoin and altcoin exchanges out there. The vast majority provide APIs to their service, and a web trading interface. But there is no open source front-end that can connect to them.

Open source is important in this realm, as no one wants to install an application that sends their private keys to their favorite anonymous hacker. Open source software provides a level of trust between the user and the developer.

Weapons:

I know we have some of the pieces, and I believe we have others.

I have been developing software since before many (maybe the majority?) of software developers were born. I know how to develop software. I especially know how to write the middle “ugly” stuff that nobody talks about and the front-end guys laugh and say they don’t need (that is, until their project stalls because their MVP was pieced together with bubble gum and shoestring and no one can unwind and unstick it).

Do I know marketing? No. Can I come up with slick slogans? Not really. But I do know how to write software. And some recent technologies may just make the “selling” of this idea not so burdensome.

Objectives:

I will write the middleware to allow front-ends to connect to multiple bitcoin and altcoin exchanges. I will allow front-ends to connect to this software using a generic front-end (probably the FIX financial protocol). The final product will be open sourced.

Tactics:

I am investigating an existing front-end that is a somewhat abandoned open source project. That will hopefully allow me to test my pieces, and provide an end-to-end software product that people can use.

The pitch:

Okay, there’s my SWOT. Now what? Well, I need to eat. So I need to find people that can back my idea because they want to see the results. I’m thinking a sort of “crowdfunding” or “smart contract” idea.

I know this part is not easy. After all, who wants to pay for a product that will be given away when it is done? But I believe that enough people want this piece that they’ll be willing to fund its development. And the front-end piece may have enough of a community that they would love to see their product put to use and supported once again, and chip in on its advancement.

The next steps:

Over the next several weeks, I will be researching several things, and attempting to put my ducks in a row.

  • Am I sure there’s no other open source project out there that does the same thing?
  • Does the front-end I’m considering have the value I think it does?
  • Is the licensing of the front-end compatible with what I’m trying to do?
  • Is my vision shaded, as I need this product, but everyone else is happy with their proprietary closed-source option?
  • What is the best way to drum up interest in the project, so that I can find eventual users, and they can provide input to its development?
  • What kind of timeframe to get a MVP out? What should be the milestones?
  • Is a smart contract something that should be looked at? What about crowdfunding? I don’t want to waste too much time on administrative tasks. I want to write software!

If you have some input, please do not hesitate to reach out. Find all the ways to contact me by clicking here.

CyrptoCurrencyExchangeConnector

There are now a multitude of crypto currencies and locations to trade them, including decentralized exchanges. What is a trader to do? Put a unified interface in front of them!

The CryptoCurrencyExchangeConnector is a piece of software that you can run locally or have hosted, that provides data feeds, accounting information, and order management capabilities between your favorite exchanges and your front-end software.

This means that your trading platform does not need to learn the languages of every exchange you want to talk to. That’s my job! This middleware piece translates much of their connectivity nuances and idiosyncrasies into a standard format that is easier for trading software to connect to.

More details coming soon.