"I wanna fly high!" (Art by me)
2021.11.28 09:13 AndTails "I wanna fly high!" (Art by me)
2021.11.28 09:13 ImACoderImACoder Hello fellow Volcano Hybrid users! I have an iPhone and I wasn't a fan of the Storz and Bickel web app. This week I was on vacation and made my own! I'd like to share with you in detail if you'd like to listen!
TL;DR I made a web app for the Volcano Hybrid and I wanted to share that experience with you guys.
To start off I'm not advocating for anyone to use this software. If you do use this software please understand that I am not affiliated with Storz and Bickel in any way and if you want to use the software it is at your own risk. I am comfortable enough to use it on my Volcano Hybrid. I want to break this down into a few sections.
What Problems Was I Trying To Solve? There were a few issues I had with the current web app hosted by Storz and Bickel
- The app is way too bright. I have sensitive eyes and there was a lot of white of the screen. I was originally getting around this with a chrome extension that makes things dark themed.
- The buttons are a bit tiny and scattered. Their heat and air buttons are svgs and scale really nicely. Before I wrote the entire app from scratch I was playing with the assets of the official app and couldn't help but wonder why those buttons don't take up more space since they scale so nicely.
- The bluetooth would get into weird states where it would seem to freeze up and then alert me that a ble process was already in place
- There were parts of the application that I didn't use that were taking up space
- The app doesn't work on iPad (fixed in my app)
- This last bullet isn't really a user problem but I didn't like the design of their code.
If any of you are coders and want to look at my source code you can find it on my Github
. I would absolutely love any feedback you have.
If you want to try out the website here
is a link. I'm using Azure free hosting and its a bit finnicky. So try to load it a couple times over the course of a few minutes. I think the website needs to warm up. Also if you have any feedback on the design or usage I'd be interested in hearing it. There is maybe a feature or two I still might add. I also will probably play with the css a bit more. To be perfectly honest the vast majority of the projects effort have been on the code stability and performance. I figured I could play with the css and start to make it look even nicer when I'm bored. I'm more of a what feels best to use kind of developer. If you do end up using the website I'm sure you'll see it changing over time. That concludes the non-technical portion of my post. Thank you for reading! Technical Deep Dive:
The application is written in the latest version of React. I originally thought I would just modify some of the existing app code to suite my needs but there were parts of it that were rather difficult to maintain. Even though the js files are broken out into multiple files they still have dependencies on each other. A lot of variables are stored directly on the window and used throughout the files. I think this is partially because the crafty has shared functionality with the Volcano (such as they both have a temperature up button). This leads to some undesirable code, such as checking to see if your connected to a "Volcano" when you're invoking the write methods. So technically speaking the writes for both products are called and then each product makes sure it only sends data to the device if the devices name matches the product. The code also uses globals to keep track of ble actions in progress. I learned something from their code. If you type the name of an id in js you get an actual reference to the element that the id is for. This little trick is used throughout the code and it really makes maintenance quite difficult. I was constantly searching all the files to find out how variables were used.
So I decided to write the whole thing from scratch. The biggest issue for me was that I never did any Bluetooth Low Energy (BLE) or Bluetooth coding at all. So I paid a lot of attention to the Bluetooth code and eventually I understood it pretty well. One thing I learned was that BLE protocol dictates that one communication happens at a time with the device. If you send a payload and then send another one before receiving a response from the previous one that will cause issues. So that explains why the original app was keeping track of a command being in progress. The main issue is how they are checking on that. I see two issues. The first is that the variable is global and there are many places it can be set. Its really hard to maintain and service. The second issue is that when a command is in progress the application alerts the user that a command is already in progress and it drops that command. How the BLE implementation works (more deep dive)
) and started to implement the read only features (such as the device serial number and hours of operation. Once I had a few readonly features I implemented my first device sync feature and toggle feature (heat on and fan on) It was at this point things were getting out of hand and I finally started to experience some side effects of not managing my BLE payloads.
The BLE Queue (more deep dive)
So I start to think and come up with a queueing system
. I hadn't done a structure like this in the front end before so there was a bit of struggle at first. I tried to use promises but I noticed that they are invoked at their construction and not in the then. I did some googling and discovered thenable objects. This just means the object has a then property. Now we have an object structure to use in the queue. The queue is recursive and will continue to process BLE payloads until there are none left. There aren't a lot of safety measures built into the queue. For example, if a payload never calls resolve it will hang indefinitely waiting for that payload to finish. Since this is a one human project I decided that is a risk I was willing to accept. I did make sure the queue was a real queue and that there was no way two BLE payloads could be processed at once. There is some settimeout code I left there in case I want to simulate a slow queue. Now that the queue was working I was really excited. No more worrying about if a BLE command is in progress. The queue just mindlessly pulls the next one of until its done. However I noticed an issue. When I click heat on/off or fan on/off it takes almost one head nod (yeah I know its a weird until of measurement) for the device to respond. This was completely unacceptable since the stock app is faster. I was scratching my head wondering why and then realized even though their BLE code is convoluted it is still cached.
The BLE Cache
So I start off by just caching the service characteristics, but that is not enough. The app is still slow. I start to think about how much of a nightmare building caches is going to be if I leave it up to the components. That would be so much work. Components wouldn't be able to share caches if they didn't share a common ancestor component (that was the case for most of the features) so that means a lot of duplicate caching. The code isn't easily copy pastable either. So it would be a lot a manual and mental effort. So I came up with an idea. Lets put the BLE connection into a thenable and build the entire BLE cache
in one go. I was so proud of this. It made the feature modules so much cleaner. It's hard to describe how much overhead was in each module. How difficult it was to look at all of the BLE code in every container. Now they were simple. All you had to do was use a method from a module import to retrieve the exact characteristic you needed at any time. The application ensures that the cache has been built before allowing the user to interface with the Volcano so the modules don't even have to check if the characteristic is in the cache! Check out how simple the hours of operation container
is when it only has to use the characteristic directly. As mentioned earlier I never really interfaced with a BLE device so I was super proud of easy it felt to extended its usage throughout the development process. Now that the cache had been fully implemented I retested and everything was very responsive! I would say the buttons instantly toggled the heat on/off. I did put click limits on the heat on/off air on/off buttons since they cause the machine to do things physically. You can only click them 10 times per second. I don't know the exact I don't think people will notice any delay (I didn't)
CI/CD Pipeline with Azure and Github
I haven't done any kind of cloud hosting before and I decided to try it out with this project. It was super easy to get started. To be honest I didn't have to learn much to do this. I made a free azure account and linked it to my github. Azure then generated a file that instructed github to build and deploy my application when new code is pushed to the master branch. This was not working at first and I couldn't figure out. It was the stock tests in the create-react-app script. That was frustrating but once that was taken care of the deploys worked! The only downside is they take an hour. I think its rebuilding everything that ever existed (you know how big node modules get). I should really setup some kind of cache but the hour deploy hasn't been an issue. I can also manually deploy from VS Code directly if I'm in a pinch. Closing Thoughts
I do want to add more granular temperature controls. I was thinking of paying someone a few dollars to make a volcano classic like dial and animate that over 9 different states. That way you could pretty much get any temperature you want to and it doesn't take up a lot of space. I currently just have four temperatures that I used often. If you have a favorite temperature I can add it to the app. I'm probably going to add the auto-shutffoff timer information to the UI in the next few days. If you somehow made it this far thank you for reading this. I had a lot of fun writing it and wanted to share with someone. If anyone wants to talk about the tech a in more depth let me know. I'd be more than happy to. I just picked up a Volcano Onyx on sale and I can't wait for it to get here. I'm 99% sure it'll work with my app the second I get it but it it doesn't I can't wait to make it work!
submitted by ImACoderImACoder
to VolcanoVaporizer [link] [comments]
2021.11.28 09:13 CinnamonSalsa Hmmmmmm🇭🇷
submitted by CinnamonSalsa to teenagers [link] [comments]
2021.11.28 09:13 g0ld_m3d4l_art Here is another OC I drew today (g0ld_m3d4l_art)
2021.11.28 09:13 lolotte1373s2 Eternal Kiba Inu Stealth Launched To Give Everyone A Fair Shot!
Eternal Kiba Inu Stealth Launched To Give Everyone A Fair Shot! BSC Token
Eternal Kiba Inu Stealth Launched To Give Everyone A Fair Shot!
Admin Team From Around The World! Dont Miss This 100x meme token!
Eternal Kiba Inu
The beauty of Eternal Kiba is, the community decides everything....future roadmap/whitepaper, website, logo, CMC/Coingecko applications etc.
Why Eternal Kiba Inu?
It is just amazing and the community is just as great and growing fast
This is far way better from other defi tokens as it’s determined team is putting 100% in this community driven project that rewards the users for particularly holding for long run . We are not aiming to provide short term profits for holders, but a reliable asset for long term investors .
100% safu, long term legit project, community driven.
Potential Admin Team from all over the world 🌎
This token can definitely be the next moonshot we have been waiting for.
Fast growing telegram 🚀
Giveaways at every single milestone.
Huge marketing coming once target holders is reached.
Tiktok influencers 🔥
Liquidity pool has been forever burned 🔥 which means developers can’t rug anyone .
100% verified contract
https: in progress, posted after launch
This project is SAFU. This project is fun. This project will have a big day. This project will have a big future.
submitted by lolotte1373s2 to AllCryptoBets [link] [comments]
2021.11.28 09:13 scoopball I need help. Even when I go to download every plain text debugger extension provided, this message still pops up.
2021.11.28 09:13 Lordhugh_III Completion of the Zroni quest chain was INCONCEIVABLE!!
2021.11.28 09:13 KevPrn Clio Maxi Kit Car road legal (2736X3648)
2021.11.28 09:13 EthanEpicMan You never know when it will strike
2021.11.28 09:13 I_Rosy What? Who‘s excited to watch?
2021.11.28 09:13 Mysterious_Seat_9146 Top surgery preparation?
Does anyone have any tips, advice, warnings, or otherwise about FTM top surgery? I’m on the waiting list and I have anxiety so I like to be prepared to help it.
My partner is also going in for top surgery in less than a week.
I know the actual surgery preparation of what to do prior and after, but I was curious if people had any advice or warnings that aren’t brought up much.
I also would just like to know what the experience is like. I’ve never been put under, but I’ve had operations and majour medical procedures.
Is there anything it’s comparable too? Anything I should know or you want to mention?
submitted by Mysterious_Seat_9146 to trans [link] [comments]
2021.11.28 09:13 Sync_00 Holup dream stan detected
2021.11.28 09:13 Dragon22721 H: raven and winterman mask W: buffoon mask
submitted by Dragon22721 to Market76 [link] [comments]
2021.11.28 09:13 Tele_Prompter Sly & The Family Stone - Thank You (Falettinme Be Mice Elf Agin)
2021.11.28 09:13 BigTomTVR Some old Isabel Hodgins. Always a stunner.
2021.11.28 09:13 frischmilch Happy first Sunday of Advent (w/ instructions)
2021.11.28 09:13 hoebudden95 LF: Larvitar
Can anyone help me out
submitted by hoebudden95 to pokemontrades [link] [comments]
2021.11.28 09:13 ShawnTheSheepy20 a cover of 'Miracle' by First of October! hope you guys enjoy this beautiful, beautiful song :)
2021.11.28 09:13 FixingStupidYall ARCX .38€ to 2k every few minutes!!!
2021.11.28 09:13 Velenjak Finally found a designer...
... then we didn't like the design
Will it ever be good enough?
So, after searching 1 month and interviewing 30+ designers, we finally chose one. Then she sent the design you see below...
I was just not happy!
So I told her, we need to jump on a zoom meeting... After 3h of readjusting and dehydration, it's finally taking shape as you can see below. (if I can post the pics in comments)
Our writers, editors and proofreaders artists, narrators, and everyone else involved is putting their hearts into this book!
To other publishers out there... Keep fighting and keep writing those books! IT WILL be worth it!
submitted by Velenjak to selfpublish [link] [comments]
2021.11.28 09:13 lawbsterdreams BONK THE LINE!!!!
2021.11.28 09:13 vidhu16 Wired: Biologist answers biology questions from Twitter [18:26]
2021.11.28 09:13 danfras2 Who is going to miss out and who is going to start collecting their share of Zeus' Bounty now?
Smart Contract Pre-Launch
We are currently in Pre-Launch with a totally new concept in Smart Contracts! Curious?
Who is going to miss out and who is going to start collecting their share of Zeus' Bounty now?
#new #smartcontract #free #giveaway #now #crypto #cryptocurrency #BNB
#contest #contests #giveaways #sweepstake #sweepstakes #smartcontracts
submitted by danfras2 to smartcontracts [link] [comments]
2021.11.28 09:13 Dark_Phoenix555 Language change.
I think because I live in Spain my CoD black ops 4 is on Italian,how can I fix this if my game is on a disc?
submitted by Dark_Phoenix555 to Blackops4 [link] [comments]
2021.11.28 09:13 mikeyj1867 Please Like this Tweet
submitted by mikeyj1867 to hoge [link] [comments]