I recently came across this new camera roll app for IOS that not only clusters photos based on subject matter, but computes an “ascetic score” and can show you your most ascetically pleasing photos. As someone who has 4,939 photos on her phone, and a love of machine learning, I had to give it a try.

My most aesthetically pleasing photo this month is… drumroll

A nail sticking out of the floor which I have caught my foot on way too many times. I took this photo so I could show the kind folks at home depot what I was talking about. It just will not stay down no matter how many times I hammer it!

I disagree. I mean it’s a fine nail and all, but my most aesthetically pleasing photo? Adding insult to injury, the nail in the floor board photo only received an ascetic score of 71%.

The clustering results were mixed. Most of the time I’d get a several clusters of what I’d consider to be the same subject matter. Admittedly, it’s more handy to scroll through effectively ten photos rather than hundreds. In scrolling through the curated roll I found cute photos I had forgotten I had taken. But the other kind of fail, when photos are clustered that shouldn’t be, is much less forgivable. When the app fails, it fails big time.

Take the following example:



In the above photos, photo A was in a cluster with similar photos, while B, C, and D were clustered together. B & C I can understand; their different children but the same general framing, although A & C are closer in framing. I would prefer A & B to be a cluster, but wouldn’t mind A, B & C. And D? What the heck happened there? Also the respective image ascetic scores are 38%, 38%, 36% and 24%. While I wouldn’t use them to showcase my work, I do think they beat nail-in-floor-board. Except maybe photo D. I have no idea what I was going for there.

Me being me, I set out to reverse engineer the algorithm and see if I could figure out what is happening.

It appears that photos are being clustered based primarily on the timestamp. Cluster B, C and D’s photos were taken from 9:16 – 9:17, where as Cluster A’s photos were taken at 9:18. It appears that a photo is added to the current cluster if it’s tags are similar to the photos in that cluster, otherwise a new cluster is formed. There’s no interleaving. As a result, visually similar photos are sometimes buried distributed in different clusters. “Buried” might be a better term, if visually different photos have a higher ascetic score and are used as the key example from the cluster. For example, the top photo in B, C and D’s cluster is another photo of Alexis. This an undesirable feature is made extra bad by the fact that the app offers to delete “visually similar” (i.e. the less ascetically pleasing photos in the cluster.) That would mean all photos of Nicole by the flowers.

I can’t help but wonder how I would have clustered the photos. My first instinct was also to use the timestamp, however, I would allow for clusters to interleave. When taking photos I don’t decide to take photos of one child in the swing, switch to the other child on the slide, and then call it done. I usually go back and forth between the girls with my attention. Clearly Photos B & A should be in the same cluster, even though D was taken after B but before A.

My next instinct was to cluster photos based on color similarity. Putting the above four photos through my Image Color Pallet app I get the following pallets:


Photos A & B have identical color pallets. Photo C is very similar, but has a blue cluster in place of the pink cluster, as the two girls are wearing different color jackets. Photo D, on the other hand, is very different. Clustering based on color pallets would put A & B in the same cluster, and possibly add photo C depending on the sensitivity threshold.

While ascetics can be a bit subjective, I was delighted to find a few research papers on the topic of creating an algorithmic base approach to predicting how aesthetically pleasing an image is. This knowledge will come in handy for the photograph apps I’m working on!

May 7, 2016

Hallmark 2016 Plan

Where did the time go? It’s already May! Time to think about Christmas ornaments.

All kidding aside, I think I forgot about Hallmark this year partially because I haven’t been enjoying it as much the past couple of years. I didn’t set foot in a hallmark store last year. Penguin Tales was the only ornament I wanted at the premiere, and I could purchase it off Amazon for the same price. I did get Cozy on Ice and Can’t Wait to Skate on eBay in an after Christmas sale. I spent too much time on eBay and purchased Making Mom & Daughter Memories which I don’t remember seeing in last year’s dreambook.

My current 2016 plan:

A Tasty Treat – That’s a big old yes. I was so disappointing Hallmark stopped the unofficial gumdrop series last year. They may have been mini ornaments, but they were my favorite. (Miniature prices didn’t hurt either!) This new series could fill the void. It has that same cuteness + sweetness combination. I’m a sucker for designs based on sugar.

That’s a Wrap – It’s cute, but I’m on the fence. My gut reaction was to want it, but I’m worried I’m letting the fact that I already own many of the other pieces in the series influence my decision. I don’t think I would purchase it if it was a stand alone ornament. My concern is that it looks less detailed than most of the other ornaments. Usually when the photo looks less detailed the ornament disappoints in person. I’ll have to wait to make the final decision.

Cookie Cutter Christmas – I’m going to pass on this one. I’m not a fan of the mitten shape. I think I’ll even pass if I see it in an after Christmas sale.

Playground Pals – I normally collect the penguins, and it’s a cute concept, but I think I will pass. If I didn’t know that was supposed to be a marry-go-round from the description I’m not sure I would have guessed it.

Comfy and Cozy – It’s adorable, but what’s with Mary Hamilton’s Bears series price tag? I bulked at the nearly $20 price tag last year, then snagged it for $5 shipped on Ebay back in February. I’ll wait for this one as well. I hope I can get it cheaply too. Then again, finding ornaments from a series cheaply on eBay is not a good sign for the series’ longevity.

That’s 1 yes, 2 no‘s, 1 most likely pass and 1 only if I can get it in an after Christmas sale. Not a lot of reason to go to the store, is there?

The number one factor in child photography is the photographer, but not for the reason you think. It’s all about the connection between the person behind the camera and the person in front of it.


Nicole has been looking forward to having her picture taken as a fairy princess for weeks. I set up the appointment about a month ago when I saw the sign at JCPenney’s. Nicole loves dress up and loves photo time, and she really loves the confluence of the two. I knew she’d be over the moon excited for dress up photo time.

The day of, however, it was shaping up to be an unmitigated disaster. Alexis was awoken up an hour prematurity from her nap by our neighbor’s lawn mower. Nicole was over excited, and acting out as three year olds tend to do when their over excited. Alexis was coping her older sibling, as younger siblings tend to do. It was an explosive combination, one that went off several times between the end of Alexis’ nap and our appointment, including just minutes before the photographer was ready for us.

Our photographer was a dream. She’s the one who had taken Nicole’s photos before we moved to Silicon Valley and was the person I requested when we moved back. She had never met Alexis before, and yet had instant connection with her. Alexis forgot all about her shoes (sometimes she hates to be without, and was protesting having them off just a few minutes earlier.)

A technically wonderful photo of an unhappy child is still a photo of an unhappy child.

After we were done, the photographer put a movie on for Nicole while she and I looked over the proofs with Alexis in my lap. Alexis was so in to having the photographer tickle her tummy, that she kept making the “more” sign while insisting “Mawr!” I tried to tickle her tummy so the photographer was free to work on the proofs, but Mommy was an unacceptable tummy tickler substitute.

It’s rare for Alexis to connect with anyone but me behind the camera. Finding a photographer who can connect with one’s kids is an awesome feeling. We’ve already booked an appointment for family photos. I need a new photo for above our mantle.

I did it! I reached my first target, a dollar a day! Last month I earned $31.60, or $1.05 a day!

As happy as I am by that, I’m not so sure I can take credit for it. Compared to the previous period, I had slightly fewer users and roughly the same number of ad impressions. I can’t credit my apps with putting more eyeballs to ads. The only change that I made that might have influenced my ad revenue was updating the descriptions. It’s possible better descriptions have led to more interested users, and more interested users might be more engaged and more likely to click. Or maybe better descriptions lead to better understanding of the page and better ads. Or maybe I’m over reaching and it’s random good luck. Either way, I’ll take it!

This month I added three new apps:

Prime, Not Prime – Think of it as hot or not, but with primes. It’s a bit harder than I intended to make it. I rarely get more than 10 before I lose the game. Maybe I’m not as good with math as I thought.

Pregnancy – Week by Week – Most pregnancy calendars have a lot of filler like how big baby is, and how he/she is developing. Many of them have a separate page for each week. (More pages means more ads shown and more revenue.) While I can appreciate the usefulness of all the extra information, sometimes you just want a calendar you can quickly scan. This app is modeled after my favorite pregnancy calendar app which was sadly taken down.

Daily Miscarriage Probability Chart – I love the Miscarriage Odds Reassurer, but it’s just not doing well. I think part of the problem is in the way people search. I’m sure the query “weekly probability of miscarriage” is much more common than “reassure me about miscarriage”. The Daily chart is designed to meet the query & interest I think most people have. There’s a link to the the reassurer from the chart. It’s my hope that anyone who needs a little extra reassurance will find their way to the reassurer.

For the month of May I intend to focus on increasing my visibility. I’ve had a marked decrease in visitors to my Readability Analyzer in the past six months. Around that same time of the decrease, I move the ads above the fold by moving text below it. Maybe the change in text hurt my search rankings, resulting in the decrease in visibility. It’s worth looking in to.

April 29, 2016

Electrical Fixes

It suddenly dawned on me that in a few weeks we’ll have been in our new home a full year. After the electrician ended up not being nearly as expensive as I feared, we decided to hire him back and fix a few more issues for us.

Most critical was the fire alarms. Shortly after moving in the fire alarm above the stair case went off in the middle of the night, thoroughly freaking out Nicole. A fresh pair of batteries and it would still occasionally chirp, much to Nicole’s chagrin. The alarm was probably past it’s prime and needed to be replaced. The alarms in our home are interconnected, so the simplest solution was to purchase the same brand as the fault alarm and just switch out the alarm leaving the harness in tact. But I couldn’t find a replacement. It turns out the manufacturer of the fault alarm had gone out of business ten years ago. (The National Fire Protection Association recommends replacing fire alarms every ten years.) All five of the fire alarms we had in our home from that manufacturer were past their prime. Not only would the harnesses need to be replaced, but it would need to be re-wired.

State law requires a fire alarm in each bedroom and in the nearby vicinity outside the bedrooms. With the layout of our home, that means four fire alarms (including the faulty one) within 6 feet of each other. I didn’t see much harm in leaving it disconnected this past year. The problem arises should we ever decide to sell the house. Besides, those other old fire alarms felt like a ticking time bomb.

Original office ceiling fan, most definitely not my style

The second issue we had was the ceiling fans. The ceiling fan in the office was original to the house, and the light could no longer be turned on. It was a minor annoyance since we could use a lamp. The previous occupant of Alexis’ room had held a broom up to the fan, damaging one of the blades. Although it was still fully functional, the damaged fans was one of the eye sores I noted when I first toured the house. Fixing it would help increase the resell value of our home.

Much more my style, and – bonus! – it works!

The electrician has been recommending we switch out our lighting fixtures to more energy efficient ones. It’s an appealing idea. The LEDs require less energy and create a whiter light better for photography. I’d love to get those eyelights I’ve been wanting, and a more modern chandelier in the dinning room would be nice. That’s the problem with home improvements. There’s always something else that can be improved upon.

For now I’m moving on from the electrical improvements. Alexis’ room is still purple, except for one two foot splash of cream from when I thought I’d try out a new color. From July. I should probably actually, you know, paint.

April 22, 2016

The Great Plant Uprising

I never had any kind of allergies…
… until I moved to California. The first summer I moved out here if I laughed too deeply, or cought too much a glimpse of too much sun my eyes would burn. There were many crying Sarah jokes that year.

I never had allergy rashes…
… until I became pregnant for the first time. My calves, knees and arms used to explored in large raised red blotches that itched like crazy. I’m allergic to pregnancy, I’d jest. My eyes still burned on occasion.

I never had bad allergies…
… until I moved back to the suburbs. This time my allergies manifested them self as congestion in my chest. I thought I had the onset of a milk cold, until it lasted for weeks.

I’m the kind of person who typically avoids medication. I credit my reluctance to take medication as part of the reason why I can often control my migraines with just Advil. Perhaps that’s true, or perhaps it’s observational bias. I don’t think of myself as a person with allergies because for most of my life I’ve never had them. It took a persistent cough and a call to the doctor before I decided to give over the counter allergy medication a try. Sure enough, about a week later my lingering cough had subsided enough to not wake me in the middle of the night, just as the doctor predicted.

Plants be evil.

So now in the long list of reasons why this move has been good for us (less commute time, less crowded, better schools, more places to take the kids) is one negative (more pollen). That’s a worth while trade off to me. I’ll just have to resign myself to the fact that I’ll need daily allergy medicine in the summer.

April 17, 2016

Not that Bad

I’ve been told I share a lot on social media. Every time someone makes a comment about how photographed my kids are a little voice inside my head shouts “I’m not that bad!” but truth be told, I’m hard pressed to think of people in my social circle who post more. So when I was rocking a sick child this afternoon and came across a marketwatch article which cited the actual average amount of sharing I was immediately curious how I compared.

The average parent will post almost 1,000 [specifically 973] photos of their child online before he/she turns five

The study is not exactly scientific, so I had to create my own methodology. The original study stated on average children were “feature” in 973 photos posted by their parents on social media before the age of five. Not knowing how they defined “featured” I decided to count every photo each child was in, including just fingers and toes. I counted each photo in a collage individually. Near duplicates were included, exact duplicates (reposts) and different post processings of the same photo were not. I’m counting photos, not posts, afterall. Almost no one posts photos of the girls besides myself, so for simplicity, I’m not counting those.

Unique Photos Shared on Each Platform (Nicole /Alexis):
Facebook: (337 / 77)
Instagram: (128 / 29)
Blog: (360 / 77) – And, man, this post did not help my count!

(Normally I double check my numbers, but this time I opted not to. I like math, but counting is rather boring.)

Removing the duplicates cross platform and I’ve only shared 364 of Nicole, and 141 of Alexis. We would expect the average person (according to the above study) to have posted 729.75 by the time the child was 45 months old (like Nicole) and 259.5 by the time the child was 16 months old (like Alexis). My posting rate is roughly half of the average. See – I’m not that bad!

Of course, you can’t really draw too much of a conclusion from the study, one way or the other. The methodology is unclear, it relies on self reporting which is notoriously unreliable, and it has a sampling issue. Besides, if you’re measuring how exposed our children are, number of photographs is a bit of a flawed metric. Is 1000 photographs taken at a single event really more exposed than 500 photographs taken on 500 different days? If I’m being honest, I think that’s why my number is lower than someone who knows me might expect.

I strive not too post too many near duplicates. In my effort to only showcase my best photographic work, I limit myself to no more than three photos per post, and only a few posts with photos a month. On facebook I have just two to four photo albums a year, including a yearly highlights album where I again limit myself to a couple photos per month. Because I post fewer photos per iteration, but more iterations, it probably appears like I’m sharing more than I actually am.

On a side note, I still maintain some of this fear over social media sharing is blown way out of proportion. There are legitimate cases of detrimental over sharing, obviously. Re-punishing a child to capture a photo of ensuing tantrum is cruel (and hopefully just a one time lapse in judgement from that parent). I also think the concern over the number of over-sharers may also be overly done. If one over-sharer has hundreds of friends, then hundreds of people know an over-sharer. Then a hundred people knowing an over-sharer doesn’t necessarily imply there are hundreds of over-sharers.

After last months testing frustrations I wrote a simple deploy script for my javascript files. Now I can work on a shared library and the changes won’t be viewable to all the apps until I’m ready to push it.

About a decade ago, when I had half a dozen active websites, I created an admin panel that spanned all my domains. It was designed more for monitoring the health of my domain network, more than for making changes to it. I wrote a simple plug-in system for smoke tests that tested the functionality of each individual domain, as well as the shared libraries between them. Smoke tests are small, often isolated tests design to test specific functionality. The idea is to detect smoke, which could indicate fire.

When I first started serious development on SarahKTyler.com I wrote a new admin panel, but it was very basic, and many of the features where hard coded. At the time I needed something that could be stood up quickly so I could get back to writing new apps. Rapid development has been my approach this past year. I don’t get paid from an app until it launches and gets eyeballs, and it doesn’t get eyeballs until the search engines have a chance to find it and add it to their indexes. The first pass can be quick and dirty. Phase two is clean the code. Three is bells and whistles.

Now that my app library has grown considerably, it was time to iterate. I’m back to the plugin admin panel design. The admin panel also handles the deployment of the shared libraries, and auto generates some code. I can now also easily write tests that let me see how users are using each app. For example, I now know the media average time someone uses my labor predictor is 15 days before their due date. I also know that a non trivial group of users use the app well before their due date. That realization lead me to add a link from the labor predictor to the miscarriage reassurer. Data driven is my favorite way to be. The only thing it doesn’t have? Smoke tests. That’s the next task on my todo list.

This past week we needed the services of both an electrician and a plumber, and somehow managed to escape the week only $200 lighter.

Having a lemon tree has been one of the unexpected pleasant surprises of our house. I am forever spoiled with homemade lemonade.

It feels like we’re spending a ton of money on our non-fixer up home. I need to keep reminding myself that all these little things are to be expected. Or rather the number of them is not unexpected, even if each individual one might be unexpected. We’ve been lucky that so far each of the issues haven’t been too expensive, with one notable exception.

I’m the kind of person whose comforted by numbers. To keep from going completely insane I’ve been keeping a list of our home repair costs. I’ve then calculated out the sale price we’d need in order to break even. (In addition to being comforted by numbers I may be a little OCD.) I’ve actually calculated out several sale prices: (1) what we’d need to break even just including repairs, (2) what we need to break even including estimated closing costs, and (3) what we need to break even including all additional maintenance costs that have come with the house.

It may seem like we’re spending a lot, but we’ll likely make it back again when we sell the house. According to both Zillow and Redfin, our home has risen enough in value to meet the first milestone. They disagree about the second one, and both don’t think we’ve reached the third. I guess the advantage of a high cost of living area is that small percentage changes translate to pretty large numbers.

I know moving was a good financial decision, but “knowing” isn’t really knowing without hard numbers.

Since we’re not planning on cashing in on the increased equity any time soon, I’ll just try to focus on the unexpected positives in our property – like our lemon tree – with a fresh glass of lemonade.

Since starting my own business I’ve been operating under the “build it and they will come” mentality. I’ve built, but few have come.

Analyzing my traffic from 2016 so far, I see that only 4.7% of my visitors are coming for only the new apps, whereas 6.9% of my visitors to my existing apps have tried some of the new ones. The new apps are in different genres, and it’s necessarily true that a visitor to one app is predisposed to like another app. Something seemed off about my adoption rate. Why wasn’t I attracting more users interested in those new apps in new genres? I’ve been stunned that even after months some of my new apps have had near zero adoption rates. This week I set off to figure out why.

It didn’t take me long to zero in on a possible culprit. My search results are awful.

Remember how I noticed my visitors seemed to prefer the old version of my labor predictor? I was making that assumption based on the number of visits to the url for the new version, and the url for the old (same as the new but with the parameter ‘type=old’ appended to the end of the URL). Take a look at the search results and see if you notice a difference in snippets.

laborsearchresult(Click to enlarge)

None of my snippets for any of my webapps were good by my estimation, but this is about as bad as I get. That first snippet is an enumeration of the values on the graph axes.

For the most part I have been ignoring meta tags under the assumption that google ignores meta tags. (That was internet common knowledge back in the mid 2000s.) These days Google uses them as a suggestion. They treat titles as suggestions too, which is a bit annoying. Enumerating my pages I see Google hasn’t exactly been consistent with how it wants to display my titles. Personally, I’d prefer consistency without the ‘- Sarah K Tyler’.

This week I decided to see if I couldn’t help Google come up with better descriptions at least. It gets a little complicated because google tries to write good snippets that match the query, not just the web page. To make my job simpler, I decided to focus on the case when someone issues a query for the name of my apps, like “labor probability calculator” above.

For a first pass I decided to use the descriptions on my app list page for descriptions. That mostly bombed. Some of my descriptions were kept, but most were ignored. My best guess is that google didn’t feel my description was any good. They may have thought I was keyword stuffing. My webapps are generally lacking in large blocks of text, and what little text there is often appears below the fold as I want my app front and center. Without much text on page to compare the description against, it might have appeared like the description wasn’t a good fit.

To eliminating the mismatching problem, I decided to text of work the meta tag descriptions into the “about” divs for each App. It’s not keyword stuffing if those words are actually being used! My success rate improved somewhat. Google was now convinced to use the “about” div, and not, say, the axes on the graph, when generating snippets, but it still wasn’t using my descriptions for the most part. Instead it was grabbing the first couple of sentences in the paragraph. Trouble is, some of those first sentences in the “about” paragraphs are motivational rather than descriptional. Google was also wasting space on unnecessary words like “About the Labor Predictor.” That’s nearly 20% of my allotted snippet space!

The apps that still have terrible descriptions:
* Baby Name Explorer (showing the title of the table, and not the description)
* Name Uniqueness Analyzer (showing part of the faq, and not the description)
* Passive Voice Detector (describing the highlighting, and not the description)
* Miscarriage Odds Reassurer (describing motivation, and not the description)
* Accelerated Debt Repayment Calculator (part of the table, and not the description)

At least that list is down from 20!

Older Posts »