That first commit

My first day is drawing to a close and I have committed a working signup page and login page. It’s not a bad outcome, but I feel I should be even further ahead.

Still fighting my enemy

I had a lot of code cleanup to do because I was in the middle of converting my code to be more DDD-friendly and SOLID before this started. This kind of premature optimization always ends up bogging me down.

It’s always a real challenge to balance learning how to do new things and being productive.

Tomorrow I plan on tackling the Helthe API code that is also in its own transitionary phase and get it in working order. I have a couple of small essays I would like to publish as well. We’ll see how all this goes!

Design worries

I don’t have a screenshot to share today because I am just using auto-generated HTML directly. It’s functional, but that’s it. I might try to take a look at making things prettier tomorrow as well if I finish early (ha!).

It dawns on me I should have probably put a line item for design. I am not a designer. I did a great job in a short time for my current marketing site, but I think this might end up being pretty time-consuming overall. I will probably just scramble to dress everything up and do a proper design pass after the week is over.

Keep up with my progress

As always, I’ll be sending updates of what is going on with the project to my mailing list. You can subscribe here!

Roadmap

I am spending my first day trying to stabilize my code since I was working on a few things before the Week of Hustle started. Our goal for today was to submit a roadmap to plan for the next few days.

What’s coming ahead

Here is the plan for the next week:

  1. You sign up for an account.
  2. You can create a project with its own API key.
  3. You get a PHP library (on GitHub) that you can add to your project for tracking application errors.
  4. Errors get sent back to Helthe and it determines if it is a new error or an existing error.
  5. You receive an email whenever a new error is created.
  6. Update my marketing site to reflect that we entered a stage where you can test.
  7. Refine my marketing message following a campfire talk with Andy Parkinson.

Technology Stack

For people wondering about what I have been using to build Helthe. Here is the list:

Symfony feels a bit limiting for pumping out something quickly like this, but I am not planning on changing. This is only a first step and Helthe is a service that will be maintained for years.

Keep up with my progress

I’ll be sending daily updates of what is going on with the project to my mailing list. You can subscribe here !

Getting back into it

It’s been a month and a half since my last blog post. Personal illness got in the way of things for most of October and I have been slowly getting back into it over the past week. My pre-order deadline for Helthe has come and gone and I have gone back to working on the project daily. Now, I am building back my blogging habit.

Welcome to the hustle

Just before getting sick, I joined  a community of bootstrappers called JFDI which is pretty great for people working alone in their basement like myself. We’re running an experiment this week called Week of Hustle where a group of us will try to build a small product in a week. You can also use this to finish a project that you have been stagnating on. That’s what I’ll be doing.

I had to answer some preliminary questions yesterday which I want to share.

  • What is your personal goal? Get Helthe into user testable stages and accepting early adopters.
  • Who is your audience? PHP Developers (like myself) who care about application errors and their impact on clients.
  • What pain are you trying to solve? In PHP, it’s really hard to find errors when things are not working. Often, you just get a white screen. If I can save developers 1 hour of debugging a month, the product pays itself.

While things have been very good this past week, being sick and not working for a month is a pretty daunting hurdle to get over. This will get me back into the flow of things even more and help me get me over my #1 enemy.

Code is my enemy

The weakness is your love of creation. You love to write clean, tested, scalable, extensible, beautiful code.

Jason Cohen

I love coding. I think myself a craftsman more than anything else and I want to be proud of what I built. This is great, but it also causes some serious problem. I am not shipping in a timely manner. This is exacerbated by working alone and setting your own rules and timelines.

So because I have a limited timeframe, I will be forced to limit my scope heavily. I will have daily goals to meet and be accountable for to help me focus and not get sidetracked.

This isn’t a new weakness or something I have just come aware of. I would say I have struggled with it since I started a year and a half ago, but it’s one I keep working on (like my blogging habit).

Speaking of blogging habit

I’ll be blogging everyday during this. Shorter posts (like this one) and maybe multiple times a day about various Helthe topics (roadmap, ideal customer, design, etc) relevant to the work I am doing this week. So stay tuned!

Want to follow my progress? I’ll be sending daily updates of what is going on with the project to my mailing list. You can subscribe here !

A plugin for a rainy day

Moving ahead from our last post, I want to present the beta version of the Helthe WordPress Error Monitoring plugin (available here). The overall goal of the plugin is to offer relevant error monitoring for your production WordPress site.

A debugging tale

When debugging WordPress (or any other programming problem for that matter), what do you usually do? You start using your badass Google-fu to find a solution and, when that fails, you post on support forums, WordPress Answers (Stack Overflow) or another medium, but I am getting ahead of myself.

Before that you need to know what to look for and that’s usually where the problem lies especially with WordPress. Unless you’re dealing with a fatal error (White Screen of Death), WordPress is generally pretty silent about issues. This is by design.

Great experience for the users. Hell for supporting them.

This is plugin is a serious attempt at helping you with that. I have already done a good effort to capture a lot of the known errors (and some new ones as well), but having you use it will help me find additional ways to help you (and find bugs) when you need it the most.

What are you getting?

I don’t plan on doing a feature by feature explanation, but I wanted to highlight a few things that I hope you will find useful.

Leveraging existing plugins

The first thing I did is consolidate some of the good stuff from the Core Control plugin and Deprecated Log Notices which do not seem to be actively worked on anymore. Those were the two plugins I knew that helped for specific problems (let me know if you know others!).

With this, you’ll know if you’re using deprecated functions or calling functions wrong. However, the more interesting element is tracking errors from the HTTP API. Without diving to deep into it, the HTTP API is used by WordPress to handle communications with other web services. This includes wp-cron and errors with the API can be one of the reasons why your cron tasks (like schedule posts) do not run.

Termination Errors

This has the potential to be very useful. Have you ever had AJAX errors with WordPress? Those can be really annoying to solve since you can’t see the output. Well now, anytime WordPress terminates with an error, it will get logged in your error log. I haven’t seen anything like this before so I am hoping that this turns out to be very useful for you.

Image Editor Errors

Another common problem you can encounter is the image editor not working because you’re missing libraries for example. This is a scenario where you really won’t know unless you spend quite a bit of time poking around.

Admin Bar Support

Wondering if there were errors when your page rendered, you’ll be able to see all the errors that were logged by the plugin in the admin bar. This is just for site administrators.

And more!

There’s quite a few more things already under the hood and, as far as I know, there’s nothing another error plugin does that isn’t covered with this current beta version. I am not satisfied yet though. The same way you think of Akismet as your default spam solution, I  want this to be a must-have for any serious WordPress professional.

I can’t do that without your help and feedback. Try it out and create issues whenever you have a production (or even development) problem that wasn’t caught by the plugin and caused you serious pain.

This is available to you for free

You won’t need to sign up for anything and you will get all the errors logged in the PHP error log. I think for this to be truly great for the community, all the features need to be available to everyone.

Where do Helthe fit in this?

Right now the plugin only writes to the PHP error log. When Helthe gets closer to the beta phase, there will be an option to add an API key that will let errors be sent to the service. The purpose of Helthe is to make error monitoring and management more convenient for you so if you’re ok with looking through your error logs then you won’t need anything else to be functional.

As always, feel free to leave a comment below or discuss on Hacker News.

P.S. If you’d like to keep up to date with my progress with Helthe, leave your email below!

[mailchimpsf_form]

Diving into WordPress errors

I would say that the most uncertain aspect of Helthe has been if it could do an amazing job monitoring WordPress errors. In the past, finding out what a problem was in WordPress has been a very frustrating (even table-flipping) experience for myself and a lot of people I have asked about it. So I set out to test and work on this critical assumption.

Can we have good error monitoring in WordPress? Is it already available? Here are my findings after 2 weeks.

What can you get right now?

I started looking through the plugin directory, did some some searching on Google and asked around. The result was some old diagnostic plugins (like Core Control) that do not seem to be supported anymore, but I am pretty sure they still work though.

You also had some error handling libraries (like the one for raygun.io) that would do something with PHP errors/exceptions (like email them to you or send them to their API).

A good start, but hardly what I was looking for. For example, no plugins could tell you if you had no PHP image editing libraries on your server. WordPress won’t give you an error, but you won’t be able to edit images without it. Often requiring you to debug for a few hours locating the issue.

When WordPress has an error, does it make a sound?

WordPress has a very unique philosophy around errors. This isn’t documented anywhere per say, but, if you are interested in reading about it, Nacin and Otto discuss their view on it in this WordPress hacker thread. At the end of the day, everything is a WP_Error and errors are coded defensively.

You will find that no exception are used in the code and that WordPress either has a fatal error (known as the white screen of death) or will fail silently without you being aware of it. The only errors that generally surface are the ones that will impact the user (Access Denied, Could not delete tag, etc.).

Because WordPress uses WP_Errors for everything, you are left to filter which, as a developer, are relevant to you. I asked around if there was documented hooks or filters where important errors might show up. The answer was that no work had been done to document them so I went deep into the core code to check it out.

Diving for answers

I had a tough time getting that answer. There’s no documentation available so I had to go through the code to find all the error handling code myself. If you’re interested in the process, I looked at every is_wp_error call in WordPress (there’s over 300 in 3.6) and then looked at all the functions and objects that were tied to that error check. That’s a lot of core code, but I was able to get a solid grasp of what was going on because of it.

After that I looked at all the wp_die calls (450+ of them in 3.6), this is a bit more tedious, but the idea was to look at what WordPress considered important enough to terminate itself. Often, they were normal reasons, but the goal was to find the error terminations and their cause.

Finally, I did take a look for new WP_Errors, but they ended not as useful as I had hoped. Critical objects do not always handle errors simply returning a new WP_Error. So while I started with this, it ended up the less useful research path.

What does WordPress do with errors?

As Nacin accurately described, there’s roughly 3 informal classification for WP_Errors. After spending a good two weeks looking at all the error code, I would generally agree with the classification given. He doesn’t really explain what WordPress does with each type so I’ll go through them and explain since this is not documented anywhere.

User Notices

These are specific errors that will surface to the user. They are generally the only WP_Errors that make it to a filter. Their purpose is to alert the user and provide feedback when an error relevant to the user occurs. Plugins can hook in and add their own error message as well. However, these errors are superficial and don’t really alert you to problems going on inside WordPress.

Warnings

These are the devious ones. Warnings are errors that do not directly affect the user experience, but prevent non-critical WordPress features from working. Quick examples are failed HTTP requests with the HTTP API and unable to select an image editor, but there’s plenty of others.

The big issue with these errors is that they very rarely make it to a filter. WordPress will simply return from the function and deal with those internally or dismiss them. As a developer or support individual, they are usually the ones you are the most interested in so it’s a real shame you cannot hook into them.

Failures

Failures are errors that need to be dealt with immediate or WordPress will not function. Most of those are found around the update code (plugins, theme and core), you’ll find some around the database code as well. They will either require user intervention or some form of rollback.

So what about the filters and hooks?

Yeah! What about those!? Like I mentioned previously, I wanted to document useful hooks where errors might show up.

I had initially thought I could use the ‘all’ hook (This hook runs for every hook/filter) to check every hook/filter for WP_Errors. You can’t use it that way. Any function using the ‘all’ hook runs before any other hook/filter function regardless of the given priority so if a plugin returns a WP_Error, you would not know. Bummer.

Besides that, there aren’t a lot of hooks or filters that are relevant if you are looking to check for application errors. Like I mentioned previously, WordPress tends to deal with them internally before they even hit a filter.

Where does this leave us?

As a developer, I hope that you have found the information useful so far. It was incredibly useful for me in getting a better sense of what was going internally in WordPress.

So in the next post, I’ll be introducing the Helthe plugin that I have been working on for monitoring WordPress errors and how I dealt with the limitations I have been discussing today.

Feel free to leave a comment below or discuss on Hacker News.

P.S. If you’d like to keep up to date with my progress with Helthe, leave your email below!

[mailchimpsf_form]

The one tool I wish I had in PHP

One thing you realize when you work by yourself is that you get a lot of benefits from tools that can automate some of your work or save you time. I have grown quite familiar with tools that you want around you when developing great PHP applications. With your production servers, you want services and products that can help you with:

  • Server monitoring
  • Server provisioning
  • Log management
  • Checking for uptime
  • Application performance
  • Application errors

This doesn’t even include developer specific services like continuous integration.

Those production server errors

Here is a common scenario.

Our client just called saying they had an error in production.

I can’t count the number of times I heard that quote. Production server errors in PHP (often the white screen of death) have always been a huge problem. When you get production errors in PHP, it’s a very painful experience for a lot of reasons.

Often, you weren’t aware of them so you have to go comb through your logs to see if you can find anything useful if you have log management that step is easier. If you’re a bit more on top of it, you get an email with a stack trace. But after, you have to go through this awkward reverse engineering process where you’re missing a lot of key information. How do you get that information?

For a lot of PHP devs (especially in the WordPress world), you will doing var dumps directly in production. That’s cowboy coding and that’s bad! Often, it’s necessary because you just don’t know what’s going on. Log information and a stack trace is sparse at best.

Meanwhile on the web…

I asked the Montréal WordPress Facebook Group what they used for errors, but only one person used an error monitoring service (Airbrake). I am always checking what the other big web languages (mainly Ruby and Python) are using to solve their problems and there are a lot of general tools that were built for this (e.g. Raygun and Sentry) that come with their own PHP libraries or third-party ones. In my research, I came across one tool, Honeybadger, that did what I wanted and they had one awesome policy.

We believe that an error management system built specifically for Ruby will be 10x better than any one-size-fits-all option.

I thought I want something like that for PHP and its frameworks/platforms. Where it’s someone who actually uses PHP and, most importantly, wants to use it. There’s plenty of language options out there and even more PHP haters so it would be nice to have someone who’s building a product where PHP isn’t an afterthought.

Hey, I know this problem! …and I know PHP!

And all I want is for something like Honeybadger to exist in PHP. So when I was brainstorming my B2B business for the app challenge, this was the first thing I thought about.

So that desire to see this exist got me to create Helthe.

Helthe helps you fix those production errors

My goal is to make Helthe the world-class error monitoring service that PHP deserves. You’ll get more than an alert, a log entry or a stack trace. You’ll get a tool designed to give you the information you need to solve those bugs faster without all the hassle.

If you are interested in having a better handle on your production server issues, check out Helthe.co for details. Otherwise, just keep checking back on how things are going. I’ll be posting regularly and sharing as much as possible of what I have been learning.

I will also be posting about production server topics and other tools you can use. So stay tuned!

Feel free to leave a comment below or discuss on Hacker News.

P.S. If you’d like to keep up to date with my progress, leave your email below!

[mailchimpsf_form]

PHP App Challenge

So I decided to stop my focus on a health for the immediate future. I might do a post-mortem of some sort eventually. That said, I’m still looking into making some form of recurring revenue so I am taking what I have learned over the last year and using it to build a PHP app and, in the vain of what Nathan Barry did with his Web App Challenge, I will try to turn this into a 6 month challenge.

Goals

So to give myself some focus, I am going to try to give myself some goals for the challenge over next 6 months.

Hit a recurring revenue of 1000$

I want to build enough recurring revenue to offset my total monthly expenses which are between 600$ and 1000$ (!). This might be a bit a bit optimistic considering what I have read from other bootstrappers. Even with my ramen lifestyle, I want to stop hemorrhaging money. So that’s the goal!

Leverage my competitive advantages

This would definitely come up in my health app post-mortem, but I think it’s clear to me now as a first time bootstrapper that I should not throw away my competitive advantage. So with that in mind, I want to leverage my longtime involvement with the WordPress community and the fact that I work primarily with PHP (gasp!).

So I would want to build a service that is useful to both the WordPress community and the rest of PHP community.

Document my journey

I’ve been writing a bit more consistently, but still not regularly enough. I want to document as much of this as possible and my refocus on programming problems should hopefully help my writing. We’ll see! This is almost a running joke at this point for me.

Let’s get started

Actually, I cheated a bit!  I have already run through a few ideas and did some quick validation through the WordPress Montréal Facebook group. I’ve been doing a small proof of concept to start to see if it is possible, but I am solving a pain I have had over the past year and at my past employment as well. I hope to be able to do a long-form marketing site and a follow-up post shortly!

P.S. If you’d like to keep up to date with my progress, leave your email below!

[mailchimpsf_form]

WordPress core as a gateway to better coding

How many of you got into PHP coding because of WordPress?

– Matt Mullenweg

Me and roughly half the room of 200+ attendees raised their hand to that question. That’s pretty incredible mused Matt. He asked that question while answering the larger question asked by 9th grader Lucas Cherkewski which was “How can WordPress be used in an education context to learn coding?”

I have been involved with WordPress for over half its 10 year existence and while I have gone from simple attendee to volunteer to community organizer over that time. I have always been a bit of the crazy one in terms of trying to help the community code better and learn about more advanced programming topics. That’s because I have been coding since I am 7-8 years old so while I learned PHP through WordPress. I had done plenty of programming before then.

Plugin development is like high school

When I was coding in high school, I couldn’t even do something as cool as a WordPress plugin. The web was just starting. I was mostly coding in Basic doing silly things like a text-based RPGs. So I think it’s amazing that someone can solve small problems with a plugin and share it with the world!

For a lot of people, that’s enough. They can solve small problems without knowing a lot of advanced programming concepts. They don’t need to graduate to college level concepts. WordPress has a lot of great APIs that are easy to use and require no advance programming knowledge.

How do you graduate to college level coding?

I did a WordPress meetup on object-oriented PHP recently and I can’t say that I am the best of teachers and a lot of the utility and reason to use object-oriented programming was lost on most because WordPress doesn’t use a lot of objects yet due to its recent PHP4 heritage.

How do I get better at PHP coding?

I don’t get asked that question a lot, but, a few months ago, Michal Bluma asked me how I got into more advanced PHP coding. I told him definitely not with WordPress. I told him I had done a lot of learning looking at the code base Doctrine1, but version1 of Doctrine is mostly discontinued and Doctrine2 is a different beast entirely.

I told him take a look at Symfony, but that’s akin to someone going from high school to college graduate. The knowledge gap is HUGE. The same would be said about Doctrine2, Zend Framework, etc.

Fundamentally, there’s no way easy way for a WordPress developer close the gap.

WordPress core is an ideal candidate for this

WordPress core would be a great place for people to get a taste for advanced programming knowledge. What’s great is that all the APIs already hide most of the internals so, if someone is looking at the core code, it’s because they want to look at it. There’s an opportunity here to allow them to become better coders! Unfortunately, that opportunity is currently wasted.

Core needs stronger coding standard

I am not talking about syntax here, but actual code quality. Core devs need to raise the bar a bit more. I am not talking about super advanced things like Reflection objects or metadata objects, but just better knowledge and use of object-oriented principles. Learning how to do object-oriented programming is really the next step if you want to learn more.

As an example, last night I submitted a ticket to core about the use of final with the WP_Post class. In my opinion, that should have never made it to core in the first place and shows a fundamental misunderstanding of object-oriented coding especially in an open source environment.

What needs to change

Honestly, it would be good if WordPress core at least used some PHP object-oriented best practices. Here are things that would be great for people looking to learn a bit more about being better PHP programmers:

  • Using interfaces where it makes sense to do so like with WP_Widget and WP_Post for example.
  • Severely limit the use of magic methods especially __get and __set
  • Exception handling instead of the white screen of death
  • Proper variable visibility
  • More abstract classes

This is just to name a few. You can find some of these in the code base already, but new code is still being committed where these basic rules are disregarded which is really the point I am trying to get across.

As a core dev, you should be holding yourself up to higher standards because you are indirectly a teacher for thousands of fledgling PHP developpers.

Feel free to leave a comment below or discuss on Hacker News.

My first open source contribution: Chronos

I have been involved with open source for a couple of years now. However, my involvement has always revolved around organizing events for the Montreal WordPress community. Except for a handful of pull requests and small jQuery plugins, I never created anything I felt would be useful to share. I am slowly trying to change that.

While I have a huge respect for Automattic as a company, I can’t think of a company that I admire more than GitHub. One of their mantras I always wanted to follow was open source (almost) everything. So since I started my current project, I have tried to keep my code as modular as I could so I could open source most of it if I could.

I didn’t really have a great opportunity till recently when I started needing recurring jobs that I could manage in PHP. I needed something that could manage both crontab like Whenever, but also handle recurring jobs programmatically a bit like wp_cron does. I looked and couldn’t find a library or set of libraries to do this.

I felt this was a good opportunity to try to get something out so I made one and I am open sourcing it today as Chronos. I’ll have a followup Symfony2 bundle available in a few days.

Why I am so bullish on health technology

optimistic about something’s or someone’s prospects

bull·ish

This monday I was having a somewhat heated discussion with my mother on the general future of health. It all started when I discussed the future of brick and mortar stores and malls. With the addition of self-driving cars, she felt that people would never go out anymore and lose whatever passive calorie expenditure we have left.

While it’s not an invalid point, I think people probably overstate the caloric importance that walking at the mall would bring. The important aspect is that if you do an effort to get out and walk, you are usually also focusing on other elements like the diet which accounts for the major portion of the calorie deficit required for weight loss. Because companies like Google and Amazon are removing frictions in our lives doesn’t have to imply that we are going to get unhealthier.

Health tech is not popular

Instead of asking “what problem should I solve?” ask “what problem do I wish someone else would solve for me?”

– Paul Graham

The first thing that comes to mind when I think of the health tech space is the essay “Schelp Blindness” by Paul Graham (all his essays are amazing btw!). There are decades of behavioural research and theory to testify to the complexity of the task on top of the fitness industry that has a business model built around the fact that you will most likely drop out of an exercise program within the first 1-3 month(s).

There’s lots of people working to make us LESS healthy – it’d be nice if you could support the people trying to make us MORE healthy.

– Jason Shen

This fact is mentioned in an article PandoDaily ran monday called “All the fitness apps in the world won’t make us thin“. It’s a common article to see in the tech press (there is understandably a lot of doubt), but it did make a few of founders come out of the woodwork to comment. The comment by Jason Shen struck a real chord with me, but a lot of the other comments were good as well. Discussions around health topics are generally very polarizing.

The PandoDaily article did have a few important points. A solution needs to be convenient for the user. I also don’t think that an advertising revenue model is going to work there, but people could make it work. Who knows. I actually disagree with the article’s interpretation of the PEW report. I saw a lot of positive indicators in the report. The fact 60% of people track weight, diet or exercise routine is, in my opinion, very significant. The issue is that people 50% track with their heads because it is more convenient even if we, humans, are terrible at it. This creates a bad feedback for the person.

Convenience and the advent of wearable computing

I don’t know how many times a day I now reach into my pocket to pull out my phone. If I had to guess, I’d guess a hundred. Maybe it’s a lot more.

– MG Siegler

I’m going to back to convenience as this is the cornerstone of everything. Never in history has a device as powerful (sensors, processing power, storage, etc.) as the smart phone been so close to a person. Which is why I am so excited about the fact that devices are getting smaller and closer to you each year.

The writing is on the wall for wearable computing (things like watches and glasses) which reduces the friction of the user with the device even more. Devices like Fitbit and FuelBand are stand-alone devices only because that’s the only way they can exist, but give it a couple more years and developers will be able to incredibly cool things with generic devices like today’s smartphones.

The insanity of it all

Insanity is doing the same thing, over and over again, but expecting different results.

– Albert Einstein

This quote sums up the essence the issue at hand. Each year in a cycle that transcends the cliché into researched behaviour, people proceed to do the same thing, use the same tools and fail in a very predictable way. It is normal for people to doubt that things will change, but they eventually do and it always seems obvious in retrospect.

In that way, I look at most of the behavioural research done in the past and I wonder what impact the smart phone or other devices could have had on their outcome. Eventually, I decided to stop wondering and slowly start working on it.

This is my first health related article. I do plan on doing a lot more in the future! I would like to point out that I would not call myself an expert, but I do spend a lot of time reading on the subject.