Search This Blog

Tuesday, October 22, 2019

I made a twitter!

https://twitter.com/AlphinEamonn

I'm going to post all my tech predictions there (as long as they're short of course). 

Thursday, January 17, 2019

Future Predictions Jan 17, 2019

Cell Phones:
Cameras will move from the top of the screen to behind the screen itself. First dead center, then partway up the screen, to align with your eyes. 

Fingerprint scanners will get embedded in the screen, then moved (when people get sick of having fingerprints on the screen all the time) to the back or side of the phone again. 

Cell phone cameras will eventually be as good as any DSLR camera, even with optical zoom. 
Cell phone cameras will get night-vision/IR/multi-spectrum sensors. Why? Because.

Cell phones will eventually replace keys and wallets entirely. 

Cell phone screens will eventually become stretchable/extendable. Holographics will not catch on because they offer no privacy. The device itself will either be stretchable, like rubber, or extendable, but with as few moving parts as possible. 

Mesh networks will become more popular for communication between phones, as a way to decrease data usage. First in small ways, like sending messages and emails, then in bigger ways as security improves: entire networks will be formed device to device. 

Some company will experiment with cellphone augmented computers. Using your cellphone as a hard drive and processor  in a larger screen and keyboard. It’ll be like a mini-tower, holding your desktop Os and files. 

Smart Watches:
They will get additional non-invasive health monitors. Something that gathers data from sweat or breath, or both. Blood sugar monitors will definitely get added. 

If smart watches get cameras, they will not point up from the face. They will point out from the side of the watch, down towards the wearers knuckes. Same with a flashlight. 

Smart watches will replace keys and wallets in the same way phones will.

Smart watch mesh networks will also become more widely used, in the same way as phones. 

Medicine
Computers will eventually replace family physicians and surgeons, but it will occur in stages. 
First, an AI will work alongside doctors to provide information and diagnoses. A doctor may consult with the AI for additional information, or to confirm a diagnosis. This is normal, and kind of already used as doctors check resources for information. 

Eventually, someone will build a booth at can provide diagnoses. It’ll be placed in a doctors office, or pharmacy. A patient goes up to it, inserts their healthcard, and tells it their symptoms. The system will make a diagnosis based on hundreds of thousands of research papers, and print out the result. The patient will take this result to their family physician, and the family physician can verify it, or provide another recommendation. Later, legislation and confidence in the AI will reach a point where the machine will offer over the counter medications, like Tylenol, if that’s all it determines the patient needs. The machine will be build like an ATM so it cannot be easily robbed. 

More legislation and research later, the machine will begin suggesting prescription medication and referrals as needed. A clinic visit and family physician may have to sign off on it though. 

MORE legislation and research later and the machine will be able to write and sign it’s own prescriptions and make it’s own referrals without any interference from a family physician. At first the patient will have to take the script to a pharmacy, then later (after more legislation), the machine will begin dispensing it’s own medication. 

To reach this point, the machine will have to be able to prove a 99% confidence in diagnosing, in addition to an ability to 
A) determine the patient that provided the health card IS the owner of the health card, B) determine that ONLY the patient is present and that two or more people aren’t providing different pieces of the data to build a “composite” patient that tricks the machine into giving them a drug. 
C) determine that the patient isn’t lying about their symptoms within at least as much confidence as a physician would have when presented with the same patient. 

This machine will probably look like a small bathroom. It will take all kinds of measurements: urine-analysis, stool analysis, blood test, breath test, sweat test, retinal scan, heart rate, pulse, speech analysis, ecg, weight, height, body fat percentage, lung capacity, bone density, age, gender, patient history. It’ll use thousands of records of “tells” as well as the biometric data to determine if a patient is lying about their history or symptoms. If the AI believes the patient is lying, they will refer them to a clinic (which the patient can book right from the machine), and send it’s finding to the clinic ahead of time. 

People will agree to use the machine because it’ll be MUCH cheaper than visiting a family physician, and it’ll have a much shorter waiting time, won’t require any embarrassing human-human interaction of a clinic, will be MUCH more accurate than a physician, and have a more complete record of the patient. With multi-patient permission, it will even be able to link relative health records (in its database) and make predictions about patient health. Although these machines will probably start off installed in clinics, eventually they will be found all over the place. 

As for surgeons, they will get replaced by robots probably much faster than even family physicians will. First they will require the supervision of a surgeon, then eventually they will be able to work on their own. 

EMS and nurses will be the slowest to replace, given the nature of their work. First responders work in a wide variety of environments that cannot be predicted, and nurses handle patients while they are awake and sometimes in unpredictable states. They will get replaced eventually, it will just take a bit longer since robots will be involved, not just sensors and AI.

Law
Lawyers will eventually get replaced with search engines and web-available AI. AI will quickly take over the task of providing forms and information. Their ability to scan and search thousands upon thousands of documents very easily and quickly will make lawyers redundant for MANY situations. 

The last to go will be defence lawyers, but even they will not last long: judges and juries will be MUCH more inclined to believe impartial, cold, unfeeling robots over emotionally invested, prone-to-lying, humans. They will also gain popularity as they dispense equal justice without taking race/age/religion/sex,etc. Into account, everyone will get treated the same, for the same cases. But they will also be feared as they will probably not be prone to mercy. Stealing food to feed your family will probably get the same sentence as stealing food because you didn’t want to pay. But the developers will probably find a way to take these factors into consideration, eventually. 

First, Law AI will be used to consult on cases, like for physicians: for data lookup and course-of-action suggestions based on the letter of the law and previous cases. Then they will provide sentences for judges to consider. Finally, they will provide sentencing on their own. Judges will be brought on by developers to review cases and adjust the code. 

Defence lawyers will be replaced, mostly by public demand, since they can’t be bought, and are truly impartial, and for the reasons mentioned above. Eventually, courts will just become the defendant, the accuser, an AI lawyer for each of them, and an AI judge, and will take about 10 minutes. Of course, all 3 AI’s will have lie-detection algorithms in them. 

x

Saturday, December 1, 2018

WeightLifts 2.2.2

****** WeightLifts 2.2 and 2.1 were experiencing a bug that caused the app to crash if you selected a workout. This seems to be a result of the Units update not getting installed properly, resulting in no units being added. Without a unit, the Do Exercise screen encounters an unexpected "null" value, which causes the app to crash. 

The quick fix is to go to the Settings, then Edit Units, and add a unit. 

This will result in another crash (because it turns out I didn't tell the table how to reload properly), but on reopening the app, the unit will be there and the app should work. 

I'm uploading version 2.2.2 as I type this which should resolve all these issues. 


********** WeightLifts 2.2 +

In this version, I added two big features: syncing workout data with Apple Health, and pairing with a Heart Rate Monitor to...monitor my heart rate....and calculate calories burned during the workout. 

This required a bit of learning on my part (thank you RayWenderlich!) about how to share and access data from Apple Health and how to communicate with bluetooth devices. 

How to sync with Apple Health
Upon launching the app after downloading/updating it, you should be presented with the system screen requesting permission to access apple health. In order to calculate your calories burned, the app needs access to your sex, weight, and age, but you can choose whether or not to let it write your workouts, heart rate and calories burned to Apple Health. 


How to Pair with a Heart Rate Monitor

**I have only been able to test this with a Polar H7 heart rate strap, which it seemed to work rather well with. I'm not sure if it will work with FitBits, wrist-monitors, or the Apple Watch (but I'm hoping to get one so I CAN make it work with it), but please, let me know if it does or doesn't! 

When you start the app, it should already be set to search for heart rate monitors that are already paired to your device. By this, I mean that you have already paired the HR device to your phone BEFORE trying to pair it with the app. Then, make sure the app is set to check for heart rate monitors by going to Settings>HR monitor in the app, and ensuring the MeasureHR item is checked. 

Next, put on your HR monitor and go to the summary screen. A box will appear beneath the "Start Workout" bar when the app has successfully begun communicating with your monitor. 

If it doesn't show up, you may have to shut down and reopen the app.

Once it's paired and the box appears, you'll see your heart rate in BPM in red text. When you start the workout (by pressing on the green Start button and selecting the workout start time), another box should appear that will show your calories burned.

The calories burned are calculated using the formulas below where:

Heart rate is in BPM (taken as the average between two consecutive readings, which are taken every second or so.) 
Weight is in Kg
Age is in Years


Males: Calories = ((-55.0969 + (0.6309 * Heart Rate) + (0.1988 * Weight) + (0.2017 * Age)) / 4.184) * minutes
Females: Calories = ((-20.4022 + (0.4472 * Heart Rate) - (0.1263 * Weight) + (0.074 * Age)) / 4.184) * minutes 

Sources:
http://www.triathloninspires.com/ti_fitness_and_health/calories-burned-by-heart-rate.html
http://fitnowtraining.com/2012/01/formula-for-calories-burned/

** if anyone can point me to a more accurate formula from some trusted resource, please do! I tested the formula for males and the results I'm getting at the end of my workouts seem to match what I was getting from the Polar app. Don't take these as 100% accurate though: no formula can be 100% accurate as everyone burns calories differently based on more factors than just heart rate. 

So every reading of the monitor the app calculates the calories burned using the average heart rate of the two readings, and adds it to the total. 

At the end of your workout, pressing the Stop button will bring up a date picker to let you confirm the time you stopped working, then it will present you with a small summary. At this point you can choose to discard the workout data (which means it won't save it to Apple Health, but you'll still have your WeightLifts record of exercises done), or save it to Apple Health. 

WeightLifts does not save your hr or calorie data within the app. 


Tuesday, September 25, 2018

New App: Holter Buddy

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

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):


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. 


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. 

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 

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.

Sunday, May 14, 2017

Tic Tac Toe (Python)




I've been working on Python and wanted to challenge myself. I had wanted to make a Tic Tac Toe game for a while, so I decided to give it a try.


The first thing I had to figure out were the rules of Tic Tac Toe as a computer would need to understand them. Here's what I came up with, in no particular order:


1) X's go first, then O's, then X's again, and so on until someone wins or the game ties.

2) If you go first, take the middle spot.

3) Try to get 3 of your symbol in a row.

4) Prevent your opponent from getting 3 of their symbols in a row.

5) You cannot place a symbol on an already occupied space.

6) The maximum amount of moves in a game is 9: 5 X's, 4 O's.

7) If you get 3 of your symbol in a row, the game is over and you've won.

8) If your opponent gets 3 symbols in a row, the game is over and your opponent has won.

9) If neither you nor your opponent get 3 symbols in a row, the game over and tied.


Then next thing I had to figure out was a way for the computer to keep track of what symbols were where, and which spaces were free. To do this, I assigned a letter to each spot on the grid:


A | B | C

----------

D | E | F

----------

G | H | I


To keep track of the game-play, I used arrays: one for the overall game-play, one for the computers moves, and one for the humans moves. So one game might look like this: [E,A,B,C,D,F,H] with X taking [E,B,D,H] and O taking [A,C,F] for a win for X.


To check for a win, I determined which combinations of taken places resulted in a win (there's 8 combinations). Then I had the computer check each players arrays against those arrays after every turn. If a player had any combination of spaces used by a winning combination, the game would end.


Now, it was easy enough to have the computer just play random spots (if they weren't taken), but a human player doesn't do that, they strategize. Unfortunately, I had no idea how to make the computer observe the field and determine (using algorithms) the best move to make. What I did know, was that it could carry out preprogrammed moves. So my first thought was to program every possible game of Tic Tac Toe and have the computer determine which moves have already been made, compare that to the database, then make a move. It turns out there are 255168 (not including symmetries) games of Tic Tac Toe that can be played. So that idea was out. Then I thought, "why not make it learn from it's victories?" So I did. When the computer won or tied, it would save the gameplay, and refer to it at each stage of subsequent games. In summary, the computer's thought process would be:


1) Is there a winning move I can make right now? if so, make it. If not:

2) Is there a move I can make right now that will prevent the human from winning afterward? If so, make it. If not:

3) Do the current pieces in this game match a game I've won before? If so, what was the next move I made at that time? Make it. If not:

4) Do the current pieces in this game match a game I've tied before? If so, what was the next move i made at that time? Make it. If not:

5) Make a random move.


Then I programmed in the niceties: placing X's and O's, updating the playing field, saving the game-plays, and so on. The last thing I did was give the user the option of playing X's or O's. Now I'm a bit embarrassed, but my solution to this broke a fundamental rule of programming: Don't Repeat Yourself. Although I repeated myself all over the place, the quickest and easiest solution was to duplicate the entire game with the symbols swapped, then give the player the choice of which game to start. It's not a perfect program, but I accomplished what I set out to do which is the first step of any bit of code.

Tuesday, April 25, 2017

WeightLifts: Editing is fixed!

Fixed the issue with editing: update 2.1.0.4 is ready for download and contains the fix. Sorry for the trouble! 

Monday, April 24, 2017

Weightlifts: Editing is broken!!

Warning! I just found a glitch: editing an entry in a workout will cause your historical data to get overwritten! Avoid using the edit function until I fix it!

Sunday, March 26, 2017

WeightLifts Coming Update 2.1.0.2

I just finished working on the next updates for WeightLifts and will release it after about a week of testing (so around April 7th to 9th). See how I went from 2.0.0.0 to 2.1.0.2? In my testing so far I've not seen any issues going from 2.0.0.0 to 2.1.0.2 (I finally sorted out the issue of it erasing all the data when making changes to the memory structure, so future updates shouldn't do that either)

Update 2.1.0.2 will have the following changes:

- The "goals" section has been replaced with a nice looking line chart instead. 
- Bug fix: Exercise Info now updates immediately after changes have been made. 
- The photo on the Exercise Info screen can be swiped to view a small line chart of the exercise history. 
- Added the ability to reorder exercises within a workout
- Added the ability to rename and reorder workouts in the workouts screen. 
- Added a bunch of new exercises to the default roster which will be installed automatically with this update. EXISTING DATA WILL NOT BE OVERWRITTEN. If you already have an exercise with the exact same name as one of the ones being added, you won't notice any change. 



Saturday, February 11, 2017

WeightLifts Bug Fix: Statistics Search

I recently discovered a bug in the search feature of the statistics menu. When a user would search for an exercise, then tap the one they want, they would end up being taken to the statistics for a different exercise (the exercise they'd get taken to was actually the one at the same row number on the full list). I've got a fix ready, and it should be available in a few days. 

Saturday, December 10, 2016

WeightLifts bugs - Pickers and secondary muscle exercises

I discovered 2 bugs in WeightLifts:

1) the Muscle group pickers weren't being filled out when a user edits an exercise by going: "Workout" -> "Exercise" -> "Edit"

and 

2) Secondary exercises weren't being populated. 

I've got these both fixed, and will the updated should be out shortly. 


Sunday, November 13, 2016

WeightLifts Date Bug

I recently discovered a bug in WeightLifts that prevented entries made on single digit dates (so, November 7, November 8, etc.) from showing up properly in history and when exported. 

The cause of the bug was a change in the way dates were displayed after the update to Swift 3. 

I had set all dates to be formatted as "MMMM dd, yyyy" which meant that dates would show up as "November 07, 2016" for example. Note the "0" before the 7. After the update, however, Apple began removing the leading "0". Since I save all my date info as strings of text instead of date objects (I find it's easier to search for strings), when retrieving data (to populate previous workout info for example) the app was searching for "November 8, 2016" when the data was saved as "November 08, 2016" and thus not finding anything. 

I have corrected the bug, and will be releasing an update towards the end of the week (after some testing). This update will contain a little bit of code that will also go through and format all the date entries to the original double digit date style. For those of you with lots of entries, you may find slight delays when loading the app. I will remove this bit of code after 3 weeks, once everyone has updated. 

Sunday, September 18, 2016

WeightLifts Update and iOS 10

It was brought to my attention that the workouts section of WeightLifts had a glitch where after adding an exercise, leaving, then returning, the exercise would not be listed under the workout. 

I have fixed the glitch and tweaked the code a bit so that the app doesn't hang while it loads all the exercise #'s and days since last workout. I also added a button to refresh the workout goals instead of it happening automatically each time that screen is pulled up. I noticed the system starts to get pretty slow once you hit 200 exercises, so this update should fix that. 

However, my Xcode did not update automatically, so I was not able to release the update on time. I've downloaded Xcode 8 but now I need to convert all the code from Swift 2.0 to Swift 3.0, a process that seems to be taking a lot longer than it should. 

As soon as everything's updated and working properly I'll have the update of the app out on the app store. Thanks for you patience! 

Saturday, June 4, 2016

Coder Manual Week 2 (mid week)

This is just a brief update, as I'm not fully done week 2 yet. We've covered a lot about HTML and Style Sheets and I've just began touching on using JavaScript. I've been looking forward to this because JavaScript is actual programming, not just cosmetics, which is what HTML and CSS are mainly about. So far in the javascript bit, we've just covered the usual programming stuff: loops, conditionals, and a bit of syntax. I'm really looking forward to learning how to get javascript to interact with HTML content though.
I've also started the first assignment. The assignments are basically just working through the free content provided by Codecademy. This was a little disappointing (it would have been MUCH more disappointing if I had paid full price for the course), but Codecademy is actually pretty good. The topics in Codecademy are broken up into bite-sized pieces, where they introduce a concept (which I had already covered in Code Manual) and they get you to put it into practice in the little built-in compiler. Once you've entered the information they want you to (such as creating a small webpage with headings, colors, fonts, etc.) you hit "save and submit" and it'll tell you if you did it right. You do also get to see a preview of the changes, so it's not like you're flying blind.

Sunday, May 22, 2016

Coder Manual Week 1

So I completed Week 1 of the Coder Manual Course. 

In Part 1, we covered setting up the different systems we needed. The first was Cloud 9 (C9.com), an online IDE where we can run Ruby (among many other languages actually). Second, he had us download Sublime Text ( SublimeText.com) which is basically a programmer-focused text editor. It'll format what you type depending on the language to make it easier to read and follow. Alternatively, he said you could use JSFiddle (JSFiddle.net), or CodePen (CodePen.io).

In Part II, he took us through how cloud 9 could be used to set up a blog. The main takeaway from this part was that there is lots of code available online that we can borrow to make ours look nice. The tutor took us to a website where we copied a bit of publicly available code into one of the files of our blog. With that in there, we were able to call upon different formats and styles that the maker of the code had already made, saving us the trouble of having to design it all ourselves. So for instance, we made 3 buttons (new post, edit post, delete post) and now we were able to enter a few lines of code that enabled those three buttons take on different appearances such as a textured green, yellow, or red. We also learned how to add entries to our blog, delete entries, and list the entries in a nice looking table complete with the date they were posted. Yes this is all stuff you can do MUCH quicker with a website like Blogger.com, but this is how you learn and what if you wanted to make a blog that can do things Blogger can't? Also, if you're probably wondering why I'm using blogger if I just learned how to make my own blog. Simple: web hosting. Blogger will host my blog, whereas I'm on my own or I'll have to pay to have my custom one properly hosted. Also, I'm still a n00b at this.

In Part III, we learned about HTML and websites. Using the Sublime Text editor, the tutor walked us through the different ways of displaying some of the most basic content on a website. We covered:

  • formatting text as:
    • paragraphs
    • headers,
    • unordered lists,
    • ordered lists,
    • nested lists,
  • inserting images,
  • putting text in tables,
  • creating forms with:
    • Text Fields,
    • Password Fields,
    • Checkboxes,
    • Radio Buttons,
    • Dropdown Selectors, and
    • Text Areas
Among a few other things. Lastly, he showed us how to bring a fancy, freely available existing template, into Cloud9 so we can edit it for ourselves. So far, he hasn't really taught us anything that you can't do much quicker using existing software, if your goal is to just make a blog or webpage. However, I'm quite pleased with what I'm learning as I feel it will help me understand much better how websites work, and programming in general. Also, this blog entry was typed almost entirely in the HTML tab of Bloggers New Post form. I formatted the tables and hyperlinks myself using code as opposed to using Blogger's autoformats. :P