Moon – A minimal, blazing fast JavaScript library inspired by Vue.js

Moon is a minimal and fast library for building user interfaces. Its syntax is similar to Vue.js but it weighs in at only 6kb and reports 102 repaints/sec which is almost double Vue’s results.

Moon combines the positive aspects of popular libraries into one small package. It’s super lightweight and includes advanced optimizations to ensure fast render times. The API is small and intuitive, while still remaining powerful.

Moon differs from the existing solutions by providing a faster, yet compact library with a simple but powerful API. It uses a virtual DOM system similar to React, but includes advanced optimizations crafted specifically for Moon, similar to the Glimmer engine by the Ember team. In a variety of benchmarks, Moon has proven itself to be the fastest UI library out there.

Per the getting started guide here is a quick example of a simple Moon instance:

const app1 = new Moon({
  el: "#app1",
  data: {
    msg: "Hello Moon!"
  }
});

{{msg}}

I know there are tons of JavaScript utilities being released but I like that some are now starting to focus on the minimal side.

The Static Site Generator Sculpin gets a New Maintainer

The PHP static site generator Sculpin announced it’s changing maintainers from Beau Simensen to Chris Tankersley.

In the announcement, Beau said the following for why he is stepping down:

This was not an easy decision for me to make. I’ve been thinking about it for a few years now. It isn’t fair to the community for my continued lack of time and energy to hold Sculpin back from moving forward.

The hardest thing for me is that Sculpin, as it stands right now, works great for me. I maintain dozens of Sculpin sites and they’ve all worked great for the last two to three years.

There are things I’d love to change but it has become clear to me that I neither have the time nor energy to make it happen.

Chris, in reference to taking over:

Sculpin has been a big part of my workflow since I started working with it, and it is one of the projects near and dear to my heart. When Beau decided to step down, it was not a hard decision to step up and help keep this project going. Sculpin is a stable, dependable static site builder, and I would hate to see it go away.

I plan on coming up with some exciting new features for Sculpin in addition to updating the codebase. I hope you all come along for the ride.

I’m happy to see the project continue to be developed and excited for both Chris and Beau. I hope the new features and updating the code base helps the project be successful.

Things Three

Yesterday, to much fanfare Cultured Code launched an all new version of the to-do app Things. The app features a new design, new features, and completely rebuilt from the ground up.

The app is really well done and in my quick testing, the feature that I most enjoyed is the “Today and This Evening” section. Things integrate directly with your calendar so you can see a list of those events grouped at the top and your tasks below. This allows you to get a high-level overview of your entire day all in one app.

Things Calendar Integration

The one part I do not like is the pricing. To go all in you’ll need to purchase for each primary device so you are looking at almost $64.00 at the current prices:

This is comparable to the competitors like Omni Focus, but in my opinion, it’s a big investment for tracking to-do items. I personally am a bigger fan of Todoist’s plans, where it’s free on all devices, then a low monthly or yearly subscription.

Over time the subscription will end up costing you more, but I feel like when I’m constantly paying they have it in their best interests to continue coming out with updates.

No matter what you choose Things 3 is a great update and if you care about design it’s worth checking out.

Being a Good Writer is an Important Career Skill – Learn how to get better at it.

Good Writer

When I was a kid, I absolutely loved reading. Part of the reason is because books didn’t talk back; I didn’t have to explain to books why I had a difficult time talking as a result of stuttering. It was no surprise when I chose to pursue a career in writing; I didn’t have to talk to people, and I could always say what I wanted to, exactly how I wanted to say it.

It was to my surprise and dismay, however, when I came into adulthood and realized I actually did have to talk to people in order to get work. When I eventually started public speaking, it became abundantly clear just how valuable verbal communication is to your professional life.

No skill will serve you better in your career than being a confident communicator. As important as being able to talk to people is, however, today I want to focus on written communication. Writing often gets a bad wrap, but it doesn’t have to be the dreaded task many of us make it out to be.

Before I started speaking, I was a full-time marketing writer and spent my professional existence helping clients create the content experience that best described their brands. When I told people I was a writer, their response was always centered around how much the thought of writing—even just an email— was absolutely miserable to them. Then, they’d list all the reasons why they didn’t like it, and the main one would always be because they weren’t good at it.

I always found this curious because now more than ever, writing is pretty vital to your career. Think about it; we’re all writing all the time. How many emails do you compose in a day? How many do you read in a day? How much time do you spend in any chat software? When was the last time you wrote a performance review? Or had to do a written report on a project?

It’s safe to say, with the exception of being strong verbal communicators and being good at your actual job, writing is pretty high on the value scale. What’s fascinating is that we have so many ChatOps tools which make communication easier, yet the vast majority of them guide you to do the thing that you claim you’re no good at: writing.

This is why I believe writing is so valuable to your career: because we’re doing it constantly. To that end, it’s not serving you to continually tell yourself you’re a bad writer. How we approach conversations—whether they’re written or verbal— has the biggest influence in how they transpire. So, if we feel like we’re not good at writing or talking, we will then enter the conversations we have with a negative mindset.

How do we fix this? The only way to be more confident as a writer is to write. You don’t need to start a blog (though you could if you’d like) and you don’t need to spend an hour on every email you send. You can, however, take the opportunities you currently have to write as chances to focus on not only improvement but the way you’re communicating your points.

The next time you have to write an email or have a longer ChatOps conversation, try this: write how you would speak to that person if they were standing in front of you at that very moment. Keep in mind your audience and what they need to read to receive your message. Writing doesn’t have to be hard; it can and should be an extension of speech if you just reframe your feelings about it. In the end, that’s all you need to do to be a good writer: choose it.

JSON Feed – A JSON based Spec for RSS or Atom Feeds

JSON Feed is a new project aiming to put together a formal spec for JSON based RSS feeds.

“For most developers, JSON is far easier to read and write than XML. Developers may groan at picking up an XML parser, but decoding JSON is often just a single line of code”, Brent Simmons said in the announcement, “Our hope is that, because of the lightness of JSON and simplicity of the JSON Feed format, developers will be more attracted to developing for the open web.”

Here is an example from a very basic feed:

{
    "version": "https://jsonfeed.org/version/1",
    "title": "My Example Feed",
    "home_page_url": "https://example.org/",
    "feed_url": "https://example.org/feed.json",
    "items": [
        {
            "id": "2",
            "content_text": "This is a second item.",
            "url": "https://example.org/second-item"
        },
        {
            "id": "1",
            "content_html": "<p>Hello, world!</p>",
            "url": "https://example.org/initial-post"
        }
    ]
}

They also aim to support a few other common use cases including:

  • Microblogs, which are often plain text and without titles.
  • Multiple attachments.
  • Modern needs such as avatar images, feed icons and favicons, and banner and featured images.

Having built a few XML based sitemaps in my lifetime I’m all for this new project and I hope it gains traction. Dealing with XML is horrific and the the web has pretty much choosen JSON as the clear winner.

For more information on this new JSON Feed, see the official site, version 1 of the spec, and the Github project.

The Atom Editor adds support for Git and Github

Atom launched a new Github Package that adds Git and GitHub integration directly in your editor. It’s currently only available in the beta channel and you’ll need v1.18 or higher.

Git is an essential part of many developers’ workflows, but dropping to the command line or another GUI application in the middle of writing code can take you out of the flow. The GitHub package provides a dock item and status bar widgets to give you access to some of the most common Git operations without leaving your editor. Stage changes and create commits, create and switch branches, and even resolve merge conflicts directly in Atom’s UI.

In the announcement they also mention this is just the beginning, and their core goal is to reduce context switching and increase productivity by bringing core workflow tools directly into your editor.

From my early test, the package is solid and it is nice for seeing a quick overview of all your local changes. Tools like this bring Atom one step closer to a big IDE, yet it still remains fast and nimble.

Voten.co a Real-Time Reddit Alternative Launches Public Beta

Voten, founded by two former Redditors Sully Fischer and Moein Nahri, a new self-funded social bookmarking platform just launched its first public beta release.

“Voten is the first real-time social bookmarking platform on the internet, ” the former Redditor Sully Fischer said in the release, “Notifications, messaging system and nested commenting system they all work in real-time. The number of online users can be seen on each conversation”.

After Victoria Taylor’s Dismissal by Reddit and the follow-ups, Voat.co’s disability in handling traffic, the founders decided to provide users a community that they deserve, a place where their vote actually matters, someplace that is safe, stable, modern and easy to use.

You can submit text, links, photos, photo albums, GIF’s, and in the future video support will be added. Plus you can bookmark within Voten, everything from submissions, comments, channels and users.

The app itself is powered by Laravel, Vue.js, Socket.io, and Node. It’s super fast and has a clean and minimal feel that you make your own by customing the colors, fonts, filters for content, and more. After the final release, Voten will also go open-source.

Voten has been in development and testing for two years, and it’s now ready for those who’ve been looking for a perfect alternative platform to Reddit that is real-time, well-designed, highly customizable yet simple to use.

Registration is now open and using an email address is optional, signup and give it a try.

Debug Ajax Requests with the Browsers Copy as cURL Feature

Debugging Ajax requests can be annoying, especially when you are sending a lot of data over like serializing an entire form. Chrome, Opera, Safari, Firefox, and other browsers all now include the ability to copy an Ajax request as cURL. This is really useful for debugging and testing while you are working locally.

Here is how you can copy the cURL request from two popular browsers:

Once you’ve copied it, your clipboard will contain a string like this with everything that is sent in the request

curl 'http://laravel-5.5.dev/api/test' -H 'Pragma: no-cache' -H 'Origin: http://laravel-5.5.dev' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Accept: */*' -H 'Cache-Control: no-cache' -H 'X-Requested-With: XMLHttpRequest' -H 'Cookie: XSRF-TOKEN=eyJpdiI6IlZIQWFLVEpmcys1M0pRNDE4N2FrQnc9PSIsInZhbHVlIjoiZ205N3haN0htMHU2b05wcmdQVGk4cmZYS1hqaENvXC9GVGdqWkZGZTRjQ1Z5MVhVU0NBWXhCSng5QWtzNVNlUTIydDJlRGlONmErQzk4VHpDVWc4cWVRPT0iLCJtYWMiOiJmNWY0NTJmYWI1ZDMxNWIzNjY0OTQ2YjlmNzU4NGM3MWY4NWFlNjAzMWU0NWI5Yjk5NmE5ZDUzZWI2YTE4Zjc5In0%3D; laravel_session=eyJpdiI6IlpmSGptSENFSXc5SmEzTmdmQitvc2c9PSIsInZhbHVlIjoiT1dZcld0eldKTXpIMjVUMUJaWHYySWswd2djSGR0SEFmZnhoTDNxbGJYU1BWZU9DTVlaK1A1UFwvaHlSVXdmOTZicmM5cTFnMjd5TEJveUk3UWJSTnZ3PT0iLCJtYWMiOiIzYzQ3ODU4YTZkNDAzYTg5NDQ1MDBmYTE4YmZjNjE5NzNmYTQxZDk0OGVhZDkxNjBkODI4NTRiZWU1ZWZkM2EyIn0%3D' -H 'Connection: keep-alive' -H 'Referer: http://laravel-5.5.dev/' -H 'DNT: 1' --data 'name=John&email=test%40test.com&age=67' --compressed

This allows you to paste it into a terminal and quickly run it again, or paste it into a text editor and make changes on the fly. The only downside is with encrypted strings it gets messy.

So you can copy and paste it into a service like curl-to-php and it’ll convert into PHP compatible curl code:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://laravel-5.5.dev/api/test");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "name=John&email=test%40test.com&age=67");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

$headers = array();
$headers[] = "Pragma: no-cache";
$headers[] = "Origin: http://laravel-5.5.dev";
$headers[] = "Accept-Encoding: gzip, deflate";
$headers[] = "Accept-Language: en-US,en;q=0.8";
$headers[] = "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36";
$headers[] = "Content-Type: application/x-www-form-urlencoded; charset=UTF-8";
$headers[] = "Accept: */*";
$headers[] = "Cache-Control: no-cache";
$headers[] = "X-Requested-With: XMLHttpRequest";
$headers[] = "Cookie: XSRF-TOKEN=eyJpdiI6IlZIQWFLVEpmcys1M0pRNDE4N2FrQnc9PSIsInZhbHVlIjoiZ205N3haN0htMHU2b05wcmdQVGk4cmZYS1hqaENvXC9GVGdqWkZGZTRjQ1Z5MVhVU0NBWXhCSng5QWtzNVNlUTIydDJlRGlONmErQzk4VHpDVWc4cWVRPT0iLCJtYWMiOiJmNWY0NTJmYWI1ZDMxNWIzNjY0OTQ2YjlmNzU4NGM3MWY4NWFlNjAzMWU0NWI5Yjk5NmE5ZDUzZWI2YTE4Zjc5In0%3D; laravel_session=eyJpdiI6IlpmSGptSENFSXc5SmEzTmdmQitvc2c9PSIsInZhbHVlIjoiT1dZcld0eldKTXpIMjVUMUJaWHYySWswd2djSGR0SEFmZnhoTDNxbGJYU1BWZU9DTVlaK1A1UFwvaHlSVXdmOTZicmM5cTFnMjd5TEJveUk3UWJSTnZ3PT0iLCJtYWMiOiIzYzQ3ODU4YTZkNDAzYTg5NDQ1MDBmYTE4YmZjNjE5NzNmYTQxZDk0OGVhZDkxNjBkODI4NTRiZWU1ZWZkM2EyIn0%3D";
$headers[] = "Connection: keep-alive";
$headers[] = "Referer: http://laravel-5.5.dev/";
$headers[] = "Dnt: 1";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);

I’ve found these two tools infinitely useful and I’d love to see a service like that curl-to-php that converts a cURL request into Guzzle compatible code.

Is that a Disposable email? Find out with this free API

Validator.pizza is a free API based web app that will let you know if an email is from a disposable email service or not.

Disposable email has become more and more popular over the years, and the logic behind it is so you can help prevent spam by having a different email address with every service you use. If some company sells your email or you start receiving spam, you can just remove that address, and you’ve never exposed your real email.

One problem with this is that spammers and bots have started using these and I’ve been seeing them used a lot more often on contact forms, trial signups, etc. Most of the time it’s not a huge deal, but in examples like setting up a trial that can cost the company money and it’s a huge red flag seeing a disposable email used.

Before this app, there hasn’t been a great way of finding out if an email is disposable. There are thousands of unique domains and this API checks against 3,144 domains. It also validates emails through an advanced Regex and can check the MX records for a given domain.

Here is a basic API call showing how it works:

GET https://www.validator.pizza/email/email@example.com

Then, successful results:

{
    "status": 200,
    "email": "email@example.com",
    "domain": "example.com",
    "mx": false,
    "disposable": false,
    "alias": false,
    "did_you_mean": false,
    "remaining_requests": 119
}

The service is currently free with a limit of 120 requests per hour, and it has a WordPress plugin available for stopping those emails from comments and registration.

A downside to this app is the documentation doesn’t inform you if the email addresses or domains are stored on their server. I’m assuming they are so they can improve the service over time, but it’s not outlined.

If you’d like to find out more about this API, the official site has the documentation, a few samples, and a link to the WordPress plugin.

What Version of Laravel do I have Installed?

A common Laravel question is “What version do I have” and how can I find this? Laravel offers several ways of answering this question but the easiest is to run the following through the Artisan command line tool:

php artisan -V

This will return the version currently installed such as:

Laravel Framework version 5.4.22

Another place you can look is inside your code at the composer.lock file. Open it and search for “laravel/framework”, and then the next line will have the version:

"version": "v5.4.22"

Either of these two places will give you the information you need and is useful for quickly finding out what version of Laravel you are running.