Loose Leaf for iPad is available!

Loose-Leaf-logoI’m exhausted. I’m relieved. I’m excited – Loose Leaf for iPad is finally available in the App Store!

If I had to pick only one of those emotions, it would be relief. After over 2 and a half years of development, I was beginning to doubt it’d ever be ready. Even in the weeks before launch, I fixed more bugs and found more new issues than I’d ever thought possible – the date kept getting pushed back, but here we are! Even the night before launch I still didn’t have a finished layout for the website, and Christi and I stayed up until midnight recording the demo videos for the site.

Over the next few weeks, I may write up some posts about how I built various features – scissors in particular was an interesting challenge, but for now I’m just thrilled it can be seen and used by more people than just me.

A few fun facts: before I started Loose Leaf,

  • iOS6 was the new hotness
  • I had never coded OpenGL
  • I only knew that Bézier‘s were “curvy lines”
  • I had never subclassed a UIGestureRecognizer

And today,

  • I only support iOS7 and 8
  • All of the drawing is rendered in OpenGL
  • A large % of my codebase is optimizations for Bézier paths
  • The vast majority of my UIGestureRecognizers are built from scratch

Clearly I had no idea what I was getting into.

You can get Loose Leaf now in the App Store:

app-store-badge

The rebirth of AskMeEvery

AskMeEveryAskMeEvery is simple tool to help bring you daily accountability for whatever task you need. You simply setup a question, and it emails you that question every day. It’s as simple as replying to an email. All of your replies are stored and graphed to show your progress.

I’ve been using it for nearly a year, and it’s been incredibly helpful for me to stay focused during Loose Leaf development. Every evening I ask myself two questions: “What did you accomplish today?” and “What do you want to accomplish tomorrow?” Two narrow questions focused on getting things done and moving forward. It’s helped me immensely to focus on small completable tasks that move me toward my goal of launching Loose Leaf.

Indie dev can be a lonely road, and it’s encouraging to look back through the month and read my responses for what I was able to accomplish. It’s admittedly not always what I’d planned to accomplish, but I do see how I moved through the surprise obstacles and stayed focused, which is rewarding and encouraging.

The Transition

Quite a few weeks ago, the current owners of AskMeEvery posted that they’d need to shut down the service – it was simply draining more money than it pulled in and couldn’t survive any longer. I immediately started talking to them to try and find a way to keep the service running. In the end, we all decided that I should take over the service and keep moving it forward. I just got all of the server keys and passwords last week, and am starting to move through the code and plan out next steps.

User registration is back open, all of the services are reviewed and up and running, and I’m working out a long term plan to keep AskMeEvery open for the foreseeable future.

Goals

Right now, the service is spending quite a bit more than it’s taking in through the paid SMS upgrade, and priority one will be to find ways to both cut costs and increase revenue. More than anything I want this to be a site that can survive on its own weight.

I also will be talking with other current users to find out how they use AskMeEvery and how its helped them form new habits and break bad ones. One thing that I appreciated immediately about AskMeEvery is broad appeal. The fuzziness affording with simple text replies to questions lets it solve ‘self-tracking’ in an approachable way. I want to double down on making it easy for anyone to track and stay accountable to their own goals, without needing to spreadsheet 4 different trackers’ data.

Thanks

I want to send a huge thanks to Mark and Eugene who have run the site for the past few years, and a thanks to all of the people who’ve helped them as well. It’s a fantastic service that has helped me and I know has helped many others accomplish their goals and stay focused. And a huge thanks to the AskMeEvery community who’s stayed on board with the service through the transition – I’m excited about where Mark and Eugene have brought us, and where we can take AskMeEvery in the coming months and years!

A “shortcut” for multiplying any two numbers

I ran into something interesting when working last night that wasn’t immediately obvious to me at first. It’s an alternate way to calculate the product of any two numbers.

I first noticed something was going on when I squared a number and then compared it to the product of numbers on either side of the original number:

5 * 5 = 25
6 * 4 = 24 (1 from 25)
7 * 3 = 21 (3 from 24)
8 * 2 = 16 (5 from 21)
9 * 1 = 9  (7 from 16)

If you subtract each result from the one before it, you see the series: 1, 3, 5, 7. “That’s interesting, I’m increasing the distance between the two numbers, and the result keeps changing by 2 also, I wonder if there’s something to that. Maybe I just got lucky, and this is something odd about 5*5 in particular. So I tried the same process, but started with 6*6, or 8*8 and got the same result.

Next, instead of looking at the difference in values from the product before it, I decided to check what the value would be compared to the original square of their average.

5 * 5 = 25 (the average, base case)
6 * 4 = 24 (1 from average)
7 * 3 = 21 (4 from average)
8 * 2 = 16 (9 from average)
9 * 1 = 9 (16 from average)

Now that’s interesting! The result of two seemingly unrelated numbers, 7 and 3 for instance, is a perfect square away from the square of the two numbers’ average.

So at this point, I have the theory that:

x * y = average(x,y)^2 - someOtherSquareRelatedTo(x,y)

Looking at the 8*2 example, i notice that they’re 9 away from 25, or 32. The average of 8 and 2 is 5, so both 8 and 2 are a distance of 3 away from 5. So that’d give the formula:

x * y = average(x,y)^2 - (average(x,y) - min(x,y))^2

If I expanded that out, then that’d result in:

x * y = average(x,y)^2 - 
       (average(x,y)^2 - 2*average(x,y)*min(x,y) + min(x,y)^2)

which simplifies to:

x * y = 2*average(x,y)*min(x,y) - min(x,y)^2

That looks just crazy to me. Maybe I’m missing something, but that’s just not obvious to me at all when I think about arbitrary x and y. I set up a script here just to double check and run the numbers, and sure enough it works out. Even for fractions and negative x and/or y.

Did I miss this lesson in school? I feel proud that I’ve figured this out, and usually when I feel like this it means I’ve missed something super obvious :D.

Google Author link
Page 1 of 4212345...102030...Last »