Thursday, February 25, 2016

Why to Choose Scrum for Web and Mobile Development

A rugby scrum, which is not the same thing as scrum development.

It's never surprised me that scrum has a bit of a controversial reputation. While some praise scrum for its effective and straightforward approach to software development, there are professional software developers who have staked their reputations on arguing that approaches such as scrum are at best pointless, and at worst detrimental to an effective software development effort.

Scrum may well have encouraged such heated debate, not because of anything intrinsic to scrum itself, but rather due to misconceptions and misapplications of the terminology and the technology that have grown up around scrum. And if your team is working on web and mobile development projects, scrum may be the best possible solution out there for managing your projects.

So What Is Scrum?

[author_more]

Scrum is one of a family of approaches to organizing software projects that fit together under the umbrella of agile. Other agile techniques include kanban and extreme programming. All of these approaches share a few common principles about how people should work together in software development, and how to optimize that process, such as:

  • Delighting the customer
  • Delivering working software frequently
  • Business people and developers working together
  • Measuring real results based on work that is completed
  • Allowing teams to self-organize
  • Reflecting regularly on what's working and what isn't

In particular, scrum is optimized for teams working on projects that can be broken down into complete slices of functionality able to be delivered within a fixed and regular time frame of usually one or two sustainable work weeks, known as sprints in scrum. Scrum uses the term stories to describe those slices of functionality, and strives to improve the team's ability to estimate how much effort would go into completing a story.

Unlike traditional software development approaches, often lumped together under the label waterfall, scrum doesn't involve long and detailed requirements documents full of specifications crafted by product managers that all need to be spelled out before the team can get started working.

Scrum is flexible enough to allow a team to get started based on just enough stories to keep them busy for a couple of weeks. In that time, if there's new user feedback, the market changes, new information comes up from outside or inside the company, or the technology underlying the product shifts, new stories can be introduced and worked on for the next couple of weeks.

Scrum also favors regular face-to-face communication over detailed specifications. This is usually helped along by having every member of the team stand up in a group daily and report on what they've done the previous day, what they're planning to do the current day, and whether they have any blockers. Scrum also recommends other regular face-to-face meetings, called rituals, for planning, demonstrating, and doing a retrospective every sprint.

While the prospect of a daily meeting may sound off-putting to a lot of developers, it's important to remember that these are all finely tuned scrum rituals managed by a scrum master, with fixed times and clear agendas. For example, the daily standup should never take longer than 15 minutes.

Roles such as scrum master and product owner are also defined within scrum. And you may have noticed that the vocabulary of scrum sounds a little funky for a professional technical environment. That's kind of the point. Scrum defines roles, rituals, and artifacts in such a way that you can't confuse them easily with other approaches.

Continue reading %Why to Choose Scrum for Web and Mobile Development%


by M. David Green via SitePoint

5 Ways to Offer a Better UX to Disabled Users

Across the population, spatial reasoning abilities vary widely from person to person. However, it's fair to say that designers generally have above-average abilities to visualize and understand how websites work. That's often why we are drawn to design in the first place. So does that make us ideal candidates for designing websites? Well, actually no. […]

Continue reading %5 Ways to Offer a Better UX to Disabled Users%


by Daniel Schwarz via SitePoint

PhoneGap NewsFlash!

cat-newsThere have been some significant updates in PhoneGap land recently in case you missed them. Read on below for a summary and links to where you can find out more!

New PhoneGap Forums

You’ve got questions? We’ve got answers! We’re super happy to announce our new PhoneGap Forums to help support all of your PhoneGap development endeavors. We’re committed to help and will be ensuring these forums are backed with enough resources from our team and the awesome Adobe Community Professionals that volunteer their time to help get your problems solved quickly and questions answered in a timely fashion. Check out yesterday’s official blog post with the specific links and details!

pg-logo

Template Support & PhoneGap CLI 6.0.0

PhoneGap CLI 6.0.0 was also announced this week with support for the latest version of Apache Cordova. One of the biggest features in the latest version of Cordova is support for templates and we want to make sure developers are aware of this new option and how to use it from both PhoneGap and Cordova.

Templates allow you to create a project based on another starter project other than the default Hello World to help you get started quickly. For instance, if you are a more advanced user that wants to start off with the most basic project shell enabled for Cordova/PhoneGap then you can just use the blank template and start coding without having to delete a bunch of code first. Plus, we now have templates available to get you started quickly with a Framework7 or React project. All you need to do is specify a --template flag with the create command specifying a local path, an npm package name or a GitHub repo URL. The PhoneGap CLI also supports the use of a shortcut name for our own team maintained templates and includes an extra template list command ($ phonegap template list) you can use to find out the available shortcut names for the currently supported templates.

For example, using the shortcut for the blank template with the PhoneGap CLI:

$ phonegap create myApp --template blank

From the Cordova CLI you would specify the npm package name:

$ cordova create myApp --template phonegap-template-blank

All PhoneGap team templates are available in npm prefixed with phonegap-template-* and searched using keyword cordova:template.

The GitHub URL template option can be particularly useful for creating projects based off other frameworks not currently available in a PhoneGap team template, like those created with Ionic, Onsen UI or Kendo UI. For example: $ cordova create onsen2App --template=http://ift.tt/1QgfBXc

Be sure to check out the official blog post regarding this update for more details.

Browser Support

We believe developers should be able to start testing and debugging their PhoneGap apps as quickly as possible and the easiest way to do so is by leveraging existing well-known web developer tools; aka your favorite browser with the built-in dev tools we already use daily. To enable this more easily with PhoneGap, we’ve updated our middleware used when you run the phonegap serve command via the CLI to turn on browser support by default. We’ve also ensured all the core PhoneGap plugins can run in the browser via a proxy without issue and fall back to any APIs the browser already supports. You will see which plugins are using a proxy (not supported directly by the browser) in the output of the serve command, for instance:


[phonegap] [console.log] adding proxy for Device
[phonegap] [console.log] adding proxy for File
[phonegap] [console.log] adding proxy for Capture
[phonegap] [console.log] adding proxy for Camera
[phonegap] [console.log] adding proxy for Accelerometer
[phonegap] [console.log] adding proxy for Compass
[phonegap] [console.log] adding proxy for NetworkStatus
[phonegap] [console.log] adding proxy for Globalization

The workflow is simple to get started quickly.

  1. Open your command line or terminal app and install the latest PhoneGap CLI

    npm install -g phonegap

  2. Create a project

    phonegap create myApp

  3. Serve it up

    phonegap serve

  4. Open your browser to the IP Address served and start debugging!

Screen Shot 2016-02-25 at 10.07.16 AM

To enable Chrome developer tools as seen in the screenshot above, use Cmd+Opt+I on Mac or Ctrl+Shift+I on Win to open the DevTools or access it via the View -> Developer menu in Chrome. Also check out their developer tool docs for more usage help.

Also, be sure to check out the official blog post regarding this new browser support for all the details. For more general help on getting started with the PhoneGap CLI, check out our documentation. Additionally, we’re currently working on supporting this from the PhoneGap Desktop app as well so stayed tuned!

Mixed Native & Hybrid Project/Docs

native-web

We’ve seen a lot of interest in mixing native and web components by embedding Cordova webviews in a native project to allow you to get the best of both worlds. I recently created a prototype with CocoaPod specs for iOS to help make this much easier and documented it in the PhoneGap docs here. It essentially allows you to enable a native iOS project with Cordova and the core plugins easily using CocoaPods. This approach works with both Objective-C based projects and Swift-based projects and definitely helps lower the barrier to entry for developers who want to try it.


PhoneGap Desktop App

The PhoneGap Desktop App also underwent a recent update and fixes the EADDRINUSE :::3000 issue as well as adding auto update for users running on OSX. There are more details regarding this update and links to the release notes here.


by Holly Schinsky via Devgirl's Weblog

Easily Allow File Upload with Rails and Refile

Enabling image uploading as a feature in your web application cannot be underestimated. Especially when it is an application that has to do with users having a profile. There are lots of gems available out there to help you handle this in a few lines of code, and most of them have been covered here on SitePoint Ruby.

They include:

In this tutorial, we will be learning how to enable image uploading in Rails using Refile. As written on Refile's github page, it is a modern file upload library for Ruby applications. It is simple, yet powerful.

Continue reading %Easily Allow File Upload with Rails and Refile%


by Kingsley Silas via SitePoint

A Smooth Refresher on Python's Classes and Objects

Python comes with many built-in data types, such as dict, list, set, etc. Have you ever wondered if you can create your own data types? Like person, car, university, etc.? Would creating such data types be possible? Yes, that is certainly possible in Python, and this is where classes and objects come into play.

In this tutorial, I'm going to describe what is meant by a class and an object, and how we can work with them in Python.

Classes and Objects

As mentioned above, classes and objects are about creating your own data type (i.e. user-defined data types). A class is thus a user-defined data type, and creating instances of a class (instantiation) means creating objects of that type. At the end of the day, classes and objects are considered the main building blocks for Python, which is an object-oriented programming language.

What would it be like to create a class in Python? The simplest class structure in Python looks as follows:

As you can see, defining a class starts with the class keyword, and className is the name of the class (identifier). Keep in mind that the class name follows the same rules as variable names in Python, that is the name can only start with a letter or underscore _, and can only contain letters, numbers. or underscores. Also, referring to PEP 8 (Style Guide for Python Code), we can see that it is recommended to name classes in CapWords (upper CamelCase) style.

Let's now define a class Person, which at the moment will not contain anything, except the pass statement. As mentioned in Python's documentation:

The pass statement does nothing. It can be used when a statement is required syntactically but the program requires no action

In order to create an instance (object) of this class, we can simply do the following:

abder =  Person()

This means that we have created a new object abder of type Person. Notice that creating an object is simply having the class name followed by parentheses.

We can identify which type abder is, and where it belongs in memory by typing: print abder. In this case, you will get something like the following:

<__main__.Person instance at 0x109a1cb48>

Attributes

Attributes are like properties we want to add to the class (type). For instance, for our class Person, let's add two attributes: name and school, as follows:

Now, we can create a new object of type Person (instance of Person) with more details, since it now has some attributes, as follows:

Methods

Methods are like functions in Python, in that they are defined with the keyword def and have the same formatting as functions. In our class, let's define a method that prints the person's name and school. The class will look as follows:

I mentioned above that methods are like functions. But the main difference is that methods need to have an argument conveniently named self, which refers to the object the method is being called on (i.e. abder). Notice that in calling the method we don't need to pass self as an argument, as Python will handle that for us.

If we don't put self as an argument in print_name(), here is how Python will complain:

You can of course pass more than one argument to the method. Let's make the process of printing the name and school in one method, as follows:

Try and run the program—did you get the same output as before?

Initialization

In the previous section, we initialized name and school by giving them an empty value ' '. But there is a more elegant way of initializing variables to default values, and here is where initialization comes in handy.

The initializer is a special method with the name __init__ (the method is considered special and will be treated in a special case, and that is why there are double underscores at the beginning and at the end).

Let's modify the previous program to use the initializer. In this case, the program will look as follows:

Notice that the initializer here needs to have two arguments. For instance, if we don't include the n argument in the initializer, we will get the following error:

So the bottom line is that with classes you will be able to create your own data types, and with objects you will be able to create instances of those data types. Classes are also composed of attributes (properties) and methods that are actions we perform on those attributes.

What was that data type you always wanted to create? Go ahead and do it!


by Abder-Rahman Ali via Envato Tuts+ Code

Making an Original Corporate Theme in WordPress: Designing Other Page Types

How to Create a Snapchat Geofilter for Your Event

kh-snapchat-geofilter-560

Have you heard of Snapchat geofilters? Want to use them to promote an event or your business? Snapchat on-demand geofilters let you design custom filters people can use on their snaps based on a custom location you define. In this article I’ll explain how to create two types of Snapchat on-demand geofilters and explore several [...]

This post How to Create a Snapchat Geofilter for Your Event first appeared on .
- Your Guide to the Social Media Jungle


by Kristi Hines via