A weekly round up of Internet and web-dev news

Hi everyone,

Every week, myself and Paul Wilkins take it in turns to compose a roundup of news and web design related articles from across the web.

The posts go up on SitePoint’s main site (here’s the current one), but this week we’re cross-posting the article to the forums in an effort to get people involved.

This comes in the wake of a closer integration of SitePoint’s articles with the forums (one of the reasons for the recent move to Discourse).

This started life as “This Week In JavaScript” and proved to be rather popular on occasion. I’d love it if we could get some discussion going around this weeks topics.

Here’s the article. I look forward to hearing which links caught your interest!



Welcome to On Our Radar, a weekly round-up of news, trends and other cool stuff from the world of web development.

Microsoft was in the news again this week, as it's CEO suffered a bout of foot-in-mouth during an on-stage conversation at the Celebration of Women in Computing conference (for which he subsequently apologized). Pundits also asked if Windows 10 will address the operating system's biggest weakness, whilst Project Spark came out of beta and we learned that Microsoft has taught Cortana to speak Klingon. buy' ngop

Elsewhere, Google officially unveiled its newest Nexus tablet device in the form of the Nexus 9 — an 8.9-inch device which will arrive running Android 5.0 Lollipop. Too much Google Glass landed one man in treatment for Internet addiction and it was revealed that Google's ‘biggest search competitor' is Amazon (somewhere, a Bing executive is crying).

Drones were also in the news as the Dronecode project was launched by the Linux Foundation. Drone racing seems to have become a thing and reports came in of Drones taking selfies to new heights (remember: a selfie taken by a drone is a dronie). One site asked "What would you do if you discovered a drone hovering over your property?" As shooting them down is very probably illegal, your garden hose might be your best bet here …

RubyGems

RubyGems is a package manager for the Ruby programming language that provides a standard format for distributing Ruby programs and libraries (in a self-contained format called a "gem").

If you've ever wanted to create your own gem from scratch, this two part tutorial will walk you through the process and give you a bunch of handy tips along the way.

Recently, the Ruby Rogues interviewed Eric Hodel, one of the RubyGems developers.

Justin Weiss is a developer who has been digging into Ruby gems. Firstly, he explained how gems work, before examining how Rails (a gem itself) handles gems.

Here's a fantastic list of gems for Ruby on Rails code optimization and clean up, as well as a gem to facilitate interacting with the Hacker News API.

In other Ruby news, Sandi Metz expounded on the shape of code, whilst it was put forward that object-oriented programming is an expensive disaster which must end.

Framework Corner

This week saw the release of the Yii 2 framework (a high performance, component-based PHP framework for rapidly developing modern Web applications). It's easy to lose track of the number of frameworks out there, so Matthew Beaumont took a look at seven reasons to choose Yii 2 over its competitors.

Staying with PHP frameworks, here's the first article in a promising-looking series about developing Laravel applications using a behavior-driven development (BDD) approach.

Sandeep Panda shared five reasons he loves AngularJS (and why you should, too). If you're already sold on Angular and can't wait to get your hands dirty, here's a very comprehensive (10,000 word) tutorial courtesy of Todd Motto. Or, if you're somewhat more experienced, be sure to avoid the top ten mistakes AngularJS developers make.

This next article shows Windows users some love and explains how to install Node.js on Windows. Once you've done that, you'll be all set to develop your very own location-based Pokémon game.

Finally, remember that frameworks aren't always the answer, as one developer explains why they choose not to use Bootstrap.

Buzzword of the Week: Progressive Enhancement

Progressive enhancement is a practice employed when constructing a website, whereby the designer starts with the content, then adds layers of enhancements to it (using, for example, JavaScript or CSS) . This results in the content being available to all, regardless of the capabilities of the device upon which it is viewed.

Progressive enhancement really matters, so I was delighted to come across a new series explaining the theory behind it, as well as how to put these ideas into practice.

There are many sites out there which stop working as soon as JavaScript is disabled. This needn't always be the case. Here's how you can create progressively enhanced UI elements using JavaScript.

A while back, Craig Buckler suggested that offline first might be the next progressive enhancement technique. Here's a more modern piece expanding on why that continues to be a good idea.

This is one designer weighing up the pros and cons of progressive enhancement. The article contains some great analogies and lots of food for thought.

In a similar vein, this article asks "Adaptive design: what is it and why should I be using it?"

Going Mobile

In the world of mobile apps this week, it was announced that Reddit has purchased the Alien Blue app and hired the developer who created it.

It seems that mobile developers are in great demand. But if you want to write mobile apps, where do you start?

Well, SitePoint to the rescue! Here's a beginners tutorial on creating a ToDo app for Android. And here's a primer on creating apps for FireFox OS.

Is iOS more your thing? Here's how to get started with Metal, a framework introduced in iOS 8 that supports GPU accelerated 3D graphics rendering and data parallel computation workloads. Phew!

When designing mobile first, navigation takes a back seat to content. This article looks at using wayfinding to restore the balance.

And finally, here is an in-depth look at HealthKit (a new tool in iOS8 that allows app developers to integrate the data they collect with other apps and with the Apple Health app) — all from the perspective of a swimming app.

So that's everything for this week. Thanks for joining us.

I'll leave you with a report that insects may well be the future of food (yeurgh!) and an article in which Web inventor Sir Tim Berners-Lee shares his thoughts on the future of farming, work and computing. Oh, and talking of Sir Tim, if you ever thought your job title slightly understates your actual role, check this out.

So which links caught your attention? Have you written a Ruby gem you'd like to share? Do you just love Yii 2? Is object-oriented programming a disaster? Do you practice progressive enhancement, or (like Tom Dale) do you think it is long dead? Either way, we would love to hear your thoughts.

The progressive enhancement and going mobile links are on my to-read list. Now I just have to find the time :slight_smile:

1 Like

Love it! Thanks @pullo… even if that means that now I have to make an effort to read them because… when will I get the time? :slight_smile:

This is awesome. I enjoyed the Drone section. Lots of interesting info.

One size doesn’t fit all, sure, but I wouldn’t go as far as to call OOP a disaster. What I would call a disaster is the long winded blog? post skewing facts and practices, rendering oop vs. functional platitudes.

I was really glad to see that progressive enhancement series, as this is something I have been bumping into a lot as of late.

For example, last week I was working on a site where the sidebar items fold up and become expandable at a small resolution. Originally I used a media query to hide them and JS to make them expandable, but had to remind myself that this would make the content inaccessible for anyone with JS disabled and that it would be better to do the hiding with JS.

I suppose, what I’m trying to say is that a little forethought can oftentimes drastically improve the user experience.

I know what you mean!

My own “to-read” list is getting longer and longer and is in danger of becoming meaningless unless I make an effort to actually read some of the articles I have bookmarked.

Do you guys have any strategy for working out what’s important to read and what isn’t?

What kind of tech-related things do you enjoy reading about?

Cheers!
Drones are just starting to take off (sorry) in Germany. Example.
I’m not sure what I would think to find one at my door though.
Are they actively being used in the States?

Yeah, it is a bit of a rant and I must admit to not having read all of it

I an slightly different vein, I was listening to this yesterday and was quite interested to hear Mr Crockford’s thoughts on objects in JavaScript. You got any thoughts on that?

I’ve come to the conclusion that all I need do is stop adding to my todo list immediately and live another five lifetimes and I should be able to get just about caught up.

1 Like

That is sadly very true.
There is just so much info out there!

My current plan is to group articles, blog posts etc into themes.
I have one list which is vaguely work related. I fire into these articles when I am doing something similar at work and need a refresher or want to enhance my skills. This gives me a context, which I find very useful. (the progressive enhancement articles being a case in point).

I also have a second list which is “nice to have / learn about”, but which are not directly work related.
This is for things such as Using Ruby to Program Arduino, which would make for a cool project, but as you say “Not in this lifetime”

1 Like

I think that’s the best approach, really. My priority goes with whatever I need to learn… which lately I’m not dedicate any time though.

Sometimes I do read things that I “shouldn’t” just out of curiosity… and then I leave something that I “should” read out because there isn’t time for everything.

But a theme approach seems to be the best solution and definately the most organized.

Hell yeah! Organized, that’s me … not!
You should see my office

What kind of things are you interested in reading about at the moment, molona?

Interested? Everything!

But since everything can’t be, right now:

  • Finish my web page (I’m still undecided on which blogging platform to use due to lack of time to test them but one of these days)

  • Best practices on everything (HTML + CSS + JavaScript…)

  • PHP

  • Javascript

  • Ruby (thanks to discourse . I want to create some plugins that I think that may be handy… one day. Or maybe not :smiley: )

  • Love to see cool stuff just for the sake of looking… and knowing what’s new today. That’s why I love sites like codrops

1 Like

Thanks for that. It’s always good to know what folks are interested in.

Regarding the blog issue, I’m facing the same thing (mine is due a redesign and I’m no longer happy with WP).
This is the best article I have seen recently: Build A Blog With Jekyll And GitHub Pages

I saw this site the other day which I bookmarked by way of inspiration. It is built using Jekyl and looks great, although there were a few things I didn’t like, such as the comments.

I understand the feeling. I like WP and you do need to know it these days… but it is always good to expand horizons and try something new.

On the other hand, althoug I want to do my own theme, I don’t know if I will have the time so in terms of variety of themes, WP would be better…

Is he making a mistake here? http://www.youtube.com/watch?feature=player_embedded&v=bo36MrBfTk4#t=2052
It looks to me like he describes it one way but with functions he goes the wrong way.

I agree about passing a spec object instead of a long list of parameters.

I agree with that for the current object, instead of using this and possibly losing the reference.

I agree with the init or the other constructor function to initialize the object.

I really like how he admits to have been wrong with the whole prototype vs. classic (after admitting being wrong with the classical model a while back) and how he focuses on how small the JavaScript benefit is yet how essentially attractive it is.

Yeah, I think he gets it round the wrong way. He says:

An inner block gets to see the variables of an outer block, but nothing on the outside gets to see whats on the inside:

{
  let a;
  {
    let b;
    - a -
    - b -
  }
  - a -
}

That’s fine. But then:

And same thing has always worked for functions in JavaScript:

function green() [
  let a;
  function yellow() {
    let b;
    - a -
    - b -
  }
  - a -
}

Where any variable I declare inside of a function is visible to the outer function, but things in the outer function not visible the other way.

Which seems to be wrong.
Something like this would make more sense:

Where any variable I declare inside of a function is visible to any nested function, but things in the nested function are not visible the other way.

Is that what you meant?

This is something I first encountered in Ruby (and specifically Rails). It got quite popular and was eventually introduced in Ruby 2 as keyword arguments.

[quote=“vion9929, post:14, topic:101242”]
I really like how he admits to have been wrong with the whole prototype vs. classic (after admitting being wrong with the classical model a while back) and how he focuses on how small the JavaScript benefit is yet how essentially attractive it is.[/quote]

Yeah, me, too.
I’m still finding my way around the intricacies of class-based vs prototype-based inheritance in JS, but it seems that JS is so flexible that you can use a variety of approaches to solve the same problem and it’s oftentimes a matter of selecting the correct tool for the job.

An example in point is that (especially come ES6) you will be able to use JS a lot like a class based language if that’s your thing, or pretty much as a functional language instead.

The same with Scala and F#.

This is awesome.

1 Like

An example in point is that (especially come ES6) you will be able to use JS a lot like a class based language if that’s your thing, or pretty much as a functional language instead.

The same with Scala and F#.

That’s part of the problem I have with Scala. There are so many different ways to do everything.

Oh you want to declare a variable and set it to an instance of an object? Well, let me show you the 4,200 different ways you could do that!

It makes it nearly unreadable at first glance. For me personally, it also leads to over thinking simple problems and spending too much time trying to figure out better ways to do things.

JS already has a bit of that, but it’s been out long enough and has a large enough community to have some standard ways of doing things. With Scala, everyone seems to be just kinda figuring out their own best practices. I should probably read up on ES6 more.

I guess Douglas Crockford’s evolution pretty much says it all.

At first he tried bringing classical inheritance to JS. He then changed his mind and said: prototype is better. Now, he is refuting the points he made in favor of the prototype and embraces constructors, but in a different, simpler way. And the way he shows it is pretty much a convergent point in JS. The problem I see here is his stance against ES6, which I don’t get it.

Though, I don’t think there’s nearly as big of a difference between the three forms of inheritance.

Crockford says classical is bad because you have to figure out what’s going to inherit from what. In other words, you have to figure out the hierarchy, or the taxonomy as he puts it.

But in his parasitic inheritance example, he still sets up a parent-child relationship. His constructor object starts by getting an other_constructor object, which he then adds to. It’s just another way of having constructor inherit from other_constructor. You’ll still have to think and make decisions about what should inherit from what and how objects should relate.

In both classical and parasitic, creating an instance produces the exact same result: a single object that contains the aggregate properties of itself and its parents. The only actual difference is the way that we the programmer express how each instance should look – either imperatively or declaratively. Classical is declarative. That is, we express what each instance should look like, but not how to assemble it. Parasitic is imperative. That is, we express the step-by-step of assembling properties into a single aggregate object.