A holter monitor is a device that records the wearer's heart activity for the period in which it is worn (usually 24 hours). Someone might be advised to wear one if they have cardiac issues and their doctor wants to get a better idea of the patients heart activity. They're about the size of a match box and have about 6 leads coming from them which are placed on various locations on the wearer's torso. While wearing one, the patient has to record (usually on a form given by the lab providing the holter) their activities and symptoms during the time they have the holter on.
Holter Buddy doesn't make wearing the holter monitor any more comfortable, but it it takes the pain out of the note-taking. The user can make a tracker by tapping the + icon in the top right of the screen. They can give the tracker a name, record it's ID# (if the lab assigned it one), and select the date and time at which the test began and will end. The app will also alert the user when the test is complete. With the tracker created, they simply have to tap the big red button and a screen will pop up allowing the user to record what they were doing, at what time they were doing it, and any symptoms they had.
Tapping on a tracker's row will bring up the history screen, where the user can see all the events they have recorded for a tracker. From the history screen they can also print off (or save to pdf via iOS's built in system) a report for the lab.
Back at the home screen, the user can fill in their profile information so it will show up on the report. I've put 3 extra data fields for anything else the user wants to share, like any medications they're on.
The app is available on the app store for free here: Holter Buddy
Search This Blog
Tuesday, September 25, 2018
Monday, January 15, 2018
NwHacks 2018
I had the good fortune of being one of the 850 chosen applicants out of 2150 to attend NwHacks 2018, the largest hackathon in western Canada! The event took place on January 13th and 14th and featured coders from as far south as California and across Canada in attendance. We could work in teams of up to 5 people and we had 24 hours to produce a tech solution. I say tech because you could use raspberry pis, VR headsets, Qualcomm Boards, Arduinos, and whatever else you wanted as long as it was electronic and coding was involved.
There was no overall theme, but the sponsors had themes they were offering prizes for. There were tech prizes, and membership prizes, and cash prizes, Nintendo Switches, gift cards, Raspberry Pi's, and lots more! The sponsors had booths set up, gave out swag, one sponsor had a TV with a N64 and Smash Bros hooked up for attendees to play. Scotiabank had a cup stacking game set up and a giant Jenga set. Attendees stayed at the event overnight, and at 3AM they had a PiƱata bash. Food was served, mini-contests were held over slack and it was overall a really good time.
You can read more about the contest here, and you can see the submissions here.
I didn't win anything, unfortunately, but I did get some takeaways, mostly as they pertain to competing in hackathons (in no particular order):
Everybody there used some 3rd party library or interface and it made their projects so much better. Learn to use them and use them.
There were a good number of projects there that I have trouble believing were completely assembled in 24 hours. I'm not saying I should have memorized my entire project beforehand then assembled it on site, but I should have had an idea about what I wanted to build and considered the flow of it, what API's I'd want to use, and so on. I went in with only a minor plan (which I didn't use as I ended up following my teams plan anyway).
My team elected to move to a quieter area in another building, and while that was great for focus, I feel like we missed out on the fun and chaos of the main hall. It's packed, yes, but there's so much else going on you really feel like part of the coder community.
Another mistake we made was spending too much time during the planning phase. Nearly the entire first day was spent just coming up with a problem to solve and defining scope. This ties in with the idea to have a plan BEFORE you come, then fully flesh it out on site. I think coding anything before coming is cheating, but coming up with flowcharts and learning HOW to code a project (as in, learning 3rd party APIs, libraries, and languages) is fine. As long as the actual building occurres on-site.
So, for example, one company was giving away prizes for the best Social Hack. That's a theme. Another one was giving away prizes for the best Accessibility Hack, another for best banking app, and so on. Since the hackathon didn't have an overall theme, picking a sponsors theme will help you narrow down your focus.
Unless you're really intent on ensuring you win a prize, I recommend trying something new. I unfortunately used the same knowledge I used in my previous hackathon and feel I missed out because of it. The sponsors at NwHacks held information sessions about using their products and APIs and I wish I attended them. Don't make my mistake, try a new database system, try a new API. You'll come away with new ideas and feeling better about your knowledge base.
Overall it was a really great experience and probably the first time I felt like I really belonged to part of a group. I loaded up on SWAG, participated in the contests, and although I didn't win anything (seriously, nothing, not even a cinnamon bun!), but I definitely want to try again next year.
There was no overall theme, but the sponsors had themes they were offering prizes for. There were tech prizes, and membership prizes, and cash prizes, Nintendo Switches, gift cards, Raspberry Pi's, and lots more! The sponsors had booths set up, gave out swag, one sponsor had a TV with a N64 and Smash Bros hooked up for attendees to play. Scotiabank had a cup stacking game set up and a giant Jenga set. Attendees stayed at the event overnight, and at 3AM they had a PiƱata bash. Food was served, mini-contests were held over slack and it was overall a really good time.
You can read more about the contest here, and you can see the submissions here.
I didn't win anything, unfortunately, but I did get some takeaways, mostly as they pertain to competing in hackathons (in no particular order):
1) Use APIs and 3rd party libraries
Everybody there used some 3rd party library or interface and it made their projects so much better. Learn to use them and use them.
2) Have a plan
There were a good number of projects there that I have trouble believing were completely assembled in 24 hours. I'm not saying I should have memorized my entire project beforehand then assembled it on site, but I should have had an idea about what I wanted to build and considered the flow of it, what API's I'd want to use, and so on. I went in with only a minor plan (which I didn't use as I ended up following my teams plan anyway).
3) Sit in the main hall (unless you absolutely can't focus)
My team elected to move to a quieter area in another building, and while that was great for focus, I feel like we missed out on the fun and chaos of the main hall. It's packed, yes, but there's so much else going on you really feel like part of the coder community.
4) Don't spend so much time planning at the event
Another mistake we made was spending too much time during the planning phase. Nearly the entire first day was spent just coming up with a problem to solve and defining scope. This ties in with the idea to have a plan BEFORE you come, then fully flesh it out on site. I think coding anything before coming is cheating, but coming up with flowcharts and learning HOW to code a project (as in, learning 3rd party APIs, libraries, and languages) is fine. As long as the actual building occurres on-site.
5) Choose the prize you want to win and build a project around the theme of that prize.
So, for example, one company was giving away prizes for the best Social Hack. That's a theme. Another one was giving away prizes for the best Accessibility Hack, another for best banking app, and so on. Since the hackathon didn't have an overall theme, picking a sponsors theme will help you narrow down your focus.
6) Try something new
Unless you're really intent on ensuring you win a prize, I recommend trying something new. I unfortunately used the same knowledge I used in my previous hackathon and feel I missed out because of it. The sponsors at NwHacks held information sessions about using their products and APIs and I wish I attended them. Don't make my mistake, try a new database system, try a new API. You'll come away with new ideas and feeling better about your knowledge base.
Overall it was a really great experience and probably the first time I felt like I really belonged to part of a group. I loaded up on SWAG, participated in the contests, and although I didn't win anything (seriously, nothing, not even a cinnamon bun!), but I definitely want to try again next year.
iTunes Apps Back Up
True to their word, Apple got back to me within 3 days and told me to try submitting the tax form again in 2 business days. I did, and it went through and my apps are back up. They're all free for now too!
Monday, January 8, 2018
iTunes Apps Currently Down
Unfortunately, my apps have been pulled from the app store while I sort out the US tax agreement.
I released the apps while I was living in the states, and since moving back to Canada I've had to move my Apple Developer account back to Canada too. This went smoothly except for the US tax agreement, which iTunes isn't letting me complete due to "An account with that name and social security number" already existing.
I'm working to sort it out, and this couldn't have happened at a worse time, but here we are.
I released the apps while I was living in the states, and since moving back to Canada I've had to move my Apple Developer account back to Canada too. This went smoothly except for the US tax agreement, which iTunes isn't letting me complete due to "An account with that name and social security number" already existing.
I'm working to sort it out, and this couldn't have happened at a worse time, but here we are.
Friday, January 5, 2018
My First Hackathon
On December 3rd, I attended my first Hackathon. It was organized by BCIT and ran from 9:00 AM on January 3rd, to 2 pm on January 4th. We were put into randomly assigned groups of 5 students and given a theme to produce a solution for. The theme was "As a BCIT Student I want _____, so that ______".
My teams solution was "As a BCIT Student I want a more useful and mobile ready MyBCIT homepage, so that I can access the site on my phone and have access to more useful information."
The MyBCIT website is one of the 3 sites we use as students, but it's the main site we use to get our course schedules, pay our tuition, and email our professors, among many other tasks. Unfortunately, it's not mobile ready, the course schedule is about 4 links deep from the home page, the search doesn't work (it takes you to another search engine where you have to re-enter the search terms again), and the campus map isn't very useful. We sought to produce a vision of what this website could be.
One of our goals was to integrate a useful course calendar onto the main page. We wanted it to show the current days schedule on mobile, and a week on any larger screen size. As we did not know how to link to the built-in calendar or student course data, we used Google Calendar to simulate what we envisioned.
The second main goal was to integrate a campus map onto the Campus Life page. BCIT has a clunky but useful campus map here. We tried embed it using an iFrame, but the permissions on the page wouldn't allow us to, so we just put a placeholder pdf map.
The final goal was to style the pages like the rest of the BCIT website (grey, blue, white, and black), and make it fit neatly on a mobile screen, which we accomplished.
There were some areas of the original website that we didn't have the time or knowledge to rework (like the groups, email, and help sections), but we felt that our main goal was accomplished. The site even has a working login page (for a fake student).
To build the site we used HTML, CSS, Bootstrap, PHP, and a bit of jQuery. We didn't face any major challenges, just a few hiccups like getting the login to work, and getting the calendar to resize depending on the screen size. In the end, we were happy with what we produced.
My teams solution was "As a BCIT Student I want a more useful and mobile ready MyBCIT homepage, so that I can access the site on my phone and have access to more useful information."
The MyBCIT website is one of the 3 sites we use as students, but it's the main site we use to get our course schedules, pay our tuition, and email our professors, among many other tasks. Unfortunately, it's not mobile ready, the course schedule is about 4 links deep from the home page, the search doesn't work (it takes you to another search engine where you have to re-enter the search terms again), and the campus map isn't very useful. We sought to produce a vision of what this website could be.
One of our goals was to integrate a useful course calendar onto the main page. We wanted it to show the current days schedule on mobile, and a week on any larger screen size. As we did not know how to link to the built-in calendar or student course data, we used Google Calendar to simulate what we envisioned.
The second main goal was to integrate a campus map onto the Campus Life page. BCIT has a clunky but useful campus map here. We tried embed it using an iFrame, but the permissions on the page wouldn't allow us to, so we just put a placeholder pdf map.
The final goal was to style the pages like the rest of the BCIT website (grey, blue, white, and black), and make it fit neatly on a mobile screen, which we accomplished.
There were some areas of the original website that we didn't have the time or knowledge to rework (like the groups, email, and help sections), but we felt that our main goal was accomplished. The site even has a working login page (for a fake student).
To build the site we used HTML, CSS, Bootstrap, PHP, and a bit of jQuery. We didn't face any major challenges, just a few hiccups like getting the login to work, and getting the calendar to resize depending on the screen size. In the end, we were happy with what we produced.
Friday, December 22, 2017
Pong
So I built Pong! I wanted to make something in Java and settled on this classic game because it seemed just challenging enough. I've never made anything that uses Javafx like this so it was an interesting challenge.
The hardest part was getting the ball to move. I had to teach myself how to use the animation features of javafx and even then it was a headache.
Basically, I generate a black screen, 2 rectangular paddles, and a ball.
Each paddle is stuck to it's side of the screen, and the paddle on the left (paddle 1), follows the y position of the mouse pointer. The other paddle line's its centre up with the y position of the ball using an animation. The general instruction is: "Paddle 2, you have x-amount of time to move your centre to line up with the y coordinate of the ball." I found using animation controls for the paddle to make it move much more smoothly than just translating it. I also implemented limits of motion so the paddles can't go off the edges of the screen.
The ball starts off in the centre and moves away from the side that last scored a point. Movement in the x-direction is done using another animation command that essentially says: "Ball, you have x-amount of time to translate in X to the rightmost (or leftmost) side of the screen." The x-amount of time controls the speed of the ball, and the direction is controlled using a switch statement that checks for a positive, zero, or negative integer.
Once the ball starts moving, a "motion-in-x" listener keeps track of where it is and if it's reached one side or the other. If it does, it runs another command to either reset the ball(if a point was scored) or bounce it back (if it hits a paddle).
When I tried to implement the same logic for the top and bottom of the screen (making the ball bounce off those sides), I got nothing but glitches. What I believe was happening was I was trying to give the ball another "animate" command while one was already in progress. The result was a conniption. In the end, I opted for a much simpler "adjust y position" command that directs the ball up or down depending on what it hit.
Finally, I implemented a way of keeping score, and topped it all off with system beep noises every time the ball hits a paddle.
The files are available for download here:
Github - Pong
The hardest part was getting the ball to move. I had to teach myself how to use the animation features of javafx and even then it was a headache.
Basically, I generate a black screen, 2 rectangular paddles, and a ball.
Each paddle is stuck to it's side of the screen, and the paddle on the left (paddle 1), follows the y position of the mouse pointer. The other paddle line's its centre up with the y position of the ball using an animation. The general instruction is: "Paddle 2, you have x-amount of time to move your centre to line up with the y coordinate of the ball." I found using animation controls for the paddle to make it move much more smoothly than just translating it. I also implemented limits of motion so the paddles can't go off the edges of the screen.
The ball starts off in the centre and moves away from the side that last scored a point. Movement in the x-direction is done using another animation command that essentially says: "Ball, you have x-amount of time to translate in X to the rightmost (or leftmost) side of the screen." The x-amount of time controls the speed of the ball, and the direction is controlled using a switch statement that checks for a positive, zero, or negative integer.
Once the ball starts moving, a "motion-in-x" listener keeps track of where it is and if it's reached one side or the other. If it does, it runs another command to either reset the ball(if a point was scored) or bounce it back (if it hits a paddle).
When I tried to implement the same logic for the top and bottom of the screen (making the ball bounce off those sides), I got nothing but glitches. What I believe was happening was I was trying to give the ball another "animate" command while one was already in progress. The result was a conniption. In the end, I opted for a much simpler "adjust y position" command that directs the ball up or down depending on what it hit.
Finally, I implemented a way of keeping score, and topped it all off with system beep noises every time the ball hits a paddle.
The files are available for download here:
Github - Pong
Saturday, June 10, 2017
Weather Webpage
I wanted practice making a functional website, so I opted for a simple weather one. I'm sure there are many better one's out there, but I haven't made one yet.
I wanted it to:
- Allow the user to search for a city,
- Display the temperature, conditions, and windspeed,
- Update the background to a related image, and
- Automatically detect the users location if the user wants.
My first idea was to build a javascript program that would pull weather data from somewhere like The Weather Network, or Yahoo. About 5 minutes into my search for how to do that it occurred to me that I do not need to reinvent the wheel; someone's GOT to have a script that already does this. That someone was James Fleeting. He made a great little Javascript Plugin called SimpleWeather.js . This script would get all the weather information I needed (and more!) and accept City, state, country, zip, and latitude and longitude as queries.
It took me a bit to understand how to get it to work, not because it was a difficult script, but because I'm still quite new to this, but I got it up and running. The hardest part was figuring out how to get it to accept a variable as a location so I could hook it to my input field and button.
With the weather updating correctly, the next thing to do was to find out how to change the background image. I knew I needed to pull images from an image hosting site, but I didn't know how. I first thought to find out how to send search terms to Google Images and retrieve the first image result, but that proved to be more difficult than I thought. It doesn't seem like a simple bit of script for that exists, for free anyway. A bit of digging on the goldmine that is Stack Overflow and I found a script that would take in a keyword and return a random image from a small, free, publicly available feed from Flickr. The pictures aren't great (it'll sometimes return a random image of a bunch of people when I'd really like a photo of a city), but it's free and it works. I added that in, then faced my next problem: getting the city and region out of the SimpleWeather script and into the Flickr script.
The nice thing about the SimpleWeather script is it'll take a location in a variety of forms, then determine the corresponding city and region, so I didn't have to find a way to convert the users search terms to something Flickr-searchable, but I had a devil of a time figuring out how to properly hook the two scripts together. I did eventually figure it out though, and got the image changing. The only problem was the image was tiled. MORE tweaking later, and I got it to be full size.
Finally, I updated James's script to his newer version that can request the user's location (if their browser supports it).
Unfortunately the location detection doesn't seem to work on this host, but everything else does, and if you copy the script below to your own computer and give it a try, it should work for you too. Be sure to download the SimpleWeather.js package from the website before running it though!
Code available here.
Subscribe to:
Posts (Atom)
