Giter VIP home page Giter VIP logo

codedeck's Introduction

Hello ๐Ÿ‘‹๐Ÿผ ๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ป

I'm James Sherlock! I'm a principal mobile engineer specialising in Swift and iOS, though I also love exploring the rest of Apple's ecosystem. I'm passionate about open-source, accessibility and automation!

I'm always looking at opportunities to widen my knowledge, whether that be web development, android apps or just struggling with seemingly simple Heroku setups ๐Ÿ‘€

Currently, I help lead the Sky Sports iOS app supporting breaking news and major sporting events for millions of users every day ๐Ÿ™Œ

I'm also an indie developer over at @GetSidetrack

codedeck's People

Contributors

sherlouk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

codedeck's Issues

Extract Firmware Version

According to issue 45 over on node-elgato-stream-deck it looks like we can extract the firmware version from the device's feature report on report ID 4. (Serial number is 3 but we already have this information)

Key Press API

One of the core fundamentals of this library is going to be the ability for developers to pick up on key presses and do something with that action. I haven't completely determined how I'd like this to work though!

Here are the different things I want to be able to track:

  • Key(s) Down
  • Key(s) Up
  • Key(s) Hold (for a specified amount of time)

Each of these should have the ability to specify either one or multiple keys to listen for. For example I could say when key 1 is pressed down do something, or when both keys 1, 3, and 5 are all pressed at the same time do something else.

Key hold is an interesting one and I don't believe should be exclusive from other events (in that it will still call key up after the specified time) and should be called once as soon as the time has been reached.

Key Pad Unlock

I see this as an extension of the Pages (#2) work and will also be an optional sub-library/module. It will add a new page that developers can create and show to the user with a basic keypad UI.

Users will then be forced to input a passcode!

The API will enable developers to get out either or an error (invalid passcode) or success blocks/delegate calls in order to do something when indeed the user inputs a passcode.

Depends on #2

StreamDeck Auto-Reconnect

The tool has the capability to inform listeners when a device is added/removed on the fly but an improvement could be made to automatically reconnect should a device with the same serial number be removed and re-connected.

Questions over whether we should queue up requests (could be complicated) or fail with a "deviceNotConnected" error (simpler)

Questions over how long we wait for a device to reconnect (no real reason not to wait forever as long as the app isn't closed)

StreamDeck Mini Support

I currently only have a full sized StreamDeck so testing on the Mini is not possible but I'd still love to support it eventually.

Having read issues on the node-elgato-stream-deck repository it does look like a few things are different.

Add CI solution

Haven't made any decisions about which CI solution I'd like to use, just one that obviously integrates easily and nicely with GitHub and the project configuration we ultimately create in #7

Goals:

  • Run automated tests
  • Gather coverage information
  • Validate CocoaPods configuration
  • Static Analysis

Pages

Possibly as a secondary "module" or sub-library to the core library I'd like to have the concept of pages or groups (similar to the official software)

In short this will enable users to click on a key, and for the entire screen to switch out for something different.

Question: Would we like to persist a navigation "stack" where you can easily call .back() to return to the previous page? (Similar to UINavigationController in an iOS world)

Question: How do we prompt clients to populate a page, maybe following a UITableView-esque data source pattern?

Initial Tests

Given that a relatively big portion of the project is the HID monitoring which is not going to be easy to completely mock.

I think the best plan of action is to make a change to the rawDeviceAdded and rawDeviceRemoved to accept an object conforming to a protocol rather than strictly a IOHIDDevice which is not easy to stub. This will enable us to pass a mocked object through to the function and test the error handling and device storage mechanisms.

The other big part will be testing the data buffers being created by the library and sent to the StreamDeck. We should be able to easily swap out a send block on the HIDDevice to assert in tests.

Configure Project for Library Consumption

Currently the project is not configured to be consumed as a standalone library which this issue should introduce.

We should support CocoaPods as a bare minimum but would love to try and get it working with others such as SPM, and Carthage.

Due to the need for entitlements I'm not sure how this works with SPM and should be investigated as part of this!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.