iOS has always offered the ability to add web pages to the home screens of iPhones and iPads, but there are tons of techniques that when combined can make for a great “app experience” via the web!
At ModevEast 2013, Ben will delve into this “app experience” with examples ranging from enterprise and prototyping, to simple informational apps. Web developers and entrepreneurs alike, don’t miss out! With an emphasis on creating value for his attendees, Ben will equip you with the necessary tools to create an intuitive, visually stunning, and cost effective app all on your own!
What you’ll learn at Add to Home Screen: The (iOS) Natives are Getting Restless
How to...
Create home screen icons
Start up splash screens
Run web apps full screen
Utilize offline storage and image uploading
Drive the user to run the page as a home screen app
By the end of this talk you’ll be armed with some great techniques for building a web app with a native feel for iOS.
Congratulations DC Americas Datafest winners! Global awards were announced over the Thanksgiving holiday and out of 67 projects and 20 locations both DC teams made it! Dream Team and Oh Fudge, you guys deserve some major props!
Best Website went to Salvaviajes for their SMS/web communication platform for migrant alerts and Oh Fudge’s ImmiViz App came in second for Best Data Viz!
Thanks for giving us the opportunity to help and work alongside you!
As I dip my toes back into programming waters after a several-year hiatus, I'm finding that I'm pretty rusty and things have changed quite a lot in the Rails world. As I run across sticky problems or new ways of doing things, I'll be noting them and writing the occasional blog post. I promise there will be nothing earth-shattering in any of these posts, and these posts will likely serve more as a reminder to myself than a public service of any sort, but the occasional useful insight may accidentally slip its way in.
One great development since I've done any serious programming is Heroku. I spent way too many hours hacking away at the command line trying (often in vain) to get a Rails app deployed, and the ease of using Heroku is just awesome. I've been coding on some side project lately, and contributing on some other people's Heroku projects, as well. Despite the extreme ease of use, each time I start working on a new project, I seem to end up googling for the same set of information.
I often have multiple Heroku apps using the same base git repo. For example, most production apps I host on Heroku also have a QA app that I'll deploy to before releasing a new version to production. Fortunately, it's very easy to add multiple remotes to a project. I tend to give the remotes explicit names like heroku_production or heroku_staging just to give myself that last little reminder of what environment I'm deploying to.
> heroku git:remote -a your_production_app_name heroku_production > heroku git:remote -a your_staging_app_name heroku_staging
But half of the time I've forgotten or done something that doesn't follow this pattern, so I have to re-determine what I used. You can view your git remotes with:
> git remote -v
If you aren't already using a similar pattern and would like to rename a git remote, it's as easy as:
> git remote rename origin destination
Now that it's all set up correctly, it's time for a deployment. Deployment on Heroku is dead simple - just push to the correct remote git repo.
Use the git remote corresponding to the environment you wish to deploy from, and specify that you're deploying from master:
> git push herokou_staging master
Deploying from a different branch or a tag is pretty dead-simple, too, though I'm embarrassed to admit how often have to look this up. I'm going to blame it on my stopping coding around the time everyone started moving from svn to git. (Yes, I realize that makes me a bit of a dinosaur)
How do you keep your team motivated? How do you avoid being sidetracked? When you work from home, how do you know when you're done for the day? I was honored to answer these questions and more as a speaker and panelist at this year's Atlassian Summit 2013.
"Woah." You'd be surprised how much I heard this uttered at the recent 2013 Atlassian Summit in San Francisco. This wasn't your typical tech conference. At the opening reception, strangers meeting over beer and sliders shared anecdotes on how Jira, HipChat, and Confluence had changed their companies. And according to keynotes from the founders, our favorites tools were only getting better.
That's why I was thrilled to speak at this celebration of Atlassian. Thanks to these tools, our fully distributed team at Intridea successfully works together on design and development projects every day. And perhaps more importantly, we get to know each other. Watch the video below or on the Atlassian Archives:
My favorite part of giving talks is always the Q&A portion. The audience had some fantastic questions! Now free of time constraints (and giving way to the next great speaker), here's a little more on each answer:
How do you keep your team motivated?
We're always asking what individuals are interested in, whether it's Javascript, Backbone, mobile, responsive design, or something we hadn't heard of yet. We then do our best to match those interests up with fitting projects. We also encourage personal ideas, especially if they contribute to open source. We pair the team member up with a "stakeholder" to map out deliverables and a roadmap, assemble a small team (1-2) when needed, and give dedicated time to launch the project in one month or less. Our latest idea, called State.ly, was launched in less than three weeks and met with incredible response from fellow developers and non-profits.
How do you avoid being sidetracked by news sites and articles?
It's true, distractions exist! But just like asking your deskmates for help, our team asks each other for tips and advice in HipChat before falling down a rabbit hole of Stack Overflow and blog posts. But what about other forms of distraction, like cat videos and y u memes? Well, we share those too. They go in our "Watercoolr" room, where folks hanging out during downtime can enjoy during a lunch break or waiting for a server deploy.
How often do team members see each other face-to-face?
We have two annual retreats: one in the US, and another overseas. Instead of long work sessions and trust falls, we make food together, explore the sights, and bond over old school video games. Aside from these large get-togethers, individual Intrideans see each other at conferences and meet-ups. Each Intridean gets one sponsored conference ticket a year, and conferences are always more fun with a coworker in tow. Contrary to what you might think about distributed companies, we know the value of face-to-face connections, and we're constantly brainstorming new ways to bring our team together.
When you work from home, how do you know when you're done for the day?
When you love what you do, it is easy to tinker far too long or accidentally while away hours ignoring the pups. Towards this, we try to foster a company culture that encourages work-life balance. Our CEO takes time to play with the kids when they get home from school. Need to step away for a doctor's appointment? There's no HR to consult first. We remind new employees to not pay too much attention to when other people are working, because we vary over six timezones. Not to mention we work when we're at our personal best: whether we're a night owl or an early bird. We also strike a balance between defined schedules and autonomy. Often our best hires are those who come from a freelance background, where time management is key.
Thanks again to Atlassian for hosting a wonderful Summit!
Here at Mobomo, we’re not just about software. We’re also about actively giving back to our community. Every Wednesday, the Mobomo team partners with the staff at Altum, Inc. to pack lunches for Helping Hungry Kids, an organization that provides weekend meals to children in lower-income homes in the Reston, VA, area.
The Altum team has perfected the art of packing lunches down to the finest detail. Crates of food are lined up by weight and placed in a circle. Then, volunteers draw circle after circle around the crates, each time filling up a bag of food for packing and distribution. Last week alone, the Altum and Mobomo volunteer teams packed 400 meals in about 15 minutes!
It has been a rewarding opportunity, and we look forward to continue working with generous organizations like Altum and Helping Hungry Kids to give back.
If you've spent any time building iOS apps using tools like Cordova or PhoneGap, you'll know that one of the biggest time-sucks is in viewing new changes to existing pages. The most common example of this would be building a Single Page Application using libraries like Backbone, Angular, or Ember.
The awful way
My flow, until recently, has been to start up the simulator from Xcode, test out my pages, stop the app from Xcode, then select Reset Content and Settings... from the iOS Simulator menu. This process is painfully slow, especially if you work iteratively like I do.
A better way
With the most recent updates to Safari, there's now a way to refresh your app from the Web Inspector (the functionality has been around for a little while via keyboard short-cuts, but the explicit UI is new).
You can access this once your app is running by opening up Safari, selecting the Develop menu, iPhone Simulator (or iPad Simulator), then index.html.
Once there, select the Resources tab and you'll see the index.html page selected, with a refresh icon to the right of the column. Click on that and you'll get a proper page reload. Alternately, you can press cmd + shift + r to trigger the reload.
Please Note: If you need to run the cordova run ios command, you may still need to re-start the emulator/re-build your app to see the changes you have made.
People live longer, are better educated, lead more healthful lives, and are less violent than at any time in human history. How do we know this? Well, after months of collaboration between Intridea and the Cato Institute, that data has come to life! Human Progress is a comprehensive research tool that allows users to explore a wealth of data on human well-being and human development indicators.
Intridea’s Marc Garrett and Maggie Lubberts will be on stage at O'Reilly Strata in London today to discuss how Intridea utilized R, responsive design, and D3.js to create this amazing research tool!
Topics for their talk:
How we saved hundreds of hours of effort by using R to build a “correlation quilt” to help us uncover interesting stories in the data.
How we used a responsive design and D3.js to let people explore the data sets whether on desktop or mobile.
How we put Steven Pinker’s data from “The Better Angles of our Nature” on the web for the first time ever.
Intridea loved bringing Human Progress to life. It's been an amazing opportunity to showcase Intridea's deep expertise in user experience design, Ruby on Rails development, data analysis, and data visualization and we are thrilled to have two of our Intrideans discussing it at O'Reilly Strata in London today!
One of the pain points of retina MacBook Pros is that Photoshop, natively, offers no elegant way to design in relative dimensions, thus 100% 1:1 pixel ratio files look tiny on a retina monitor.
My first stab at alleviating the squinting and blurriness was a naive attempt to simply x2 the pixel dimensions of my document (1200px scaled to 2400px).
Bottom line: Don't do it!
While it gets the job done, Photoshop doesn't natively do a great job of scaling type and patterns up and down. Thus, what was 24px on a retina screen becomes 12.01px on a non-retina screen, which will drive any designer completely crazy.
So what's the solution? Well, thanks to the folks at UI Parade, I did stumble upon an indirect solution. Their plugin, DevRocket, offers magical (+) and (-) buttons that leave nothing to Photoshop's interpretation. This was originally released to facilitate more realistic iOS retina comping. In a recent version of DevRocket, however, they've allowed the plus and minus buttons to be used on documents not generated by their plug-in.
While small, this DevRocket feature has been quite handy; enabling myself as well as our entire design team to work together in a way that is beautiful-regardless of pixel density!
Troubleshooting Tip: The only hiccup in this process is that copying and pasting text in a new layer occasionally confuses Photoshop; copying 12px text onto a new layer sometimes creates 24px text on a 1:1 document. After a few times though, this will become second nature.
JSON Web Token is a simple way to send information in the clear (usually in a URL) whose contents can be verified to be trusted. When might you use something like this?
In a Single Sign-On scenario where you want a separate authentication server that can then send user information in a trusted way. I wrote omniauth-jwt recently for just this purpose
When generating "one-click" email action links (as I talked about once before on this blog, but this is a better method!)
Any time you have the need to communicate a small payload of information between two sources via an unsecured transport
Before we get started, it's important to note that JWT does not encrypt the payload, it only signs it. You should not send any secret information using JWT, rather you should send information that is not secret but needs to be verified. For instance, sending a signed user id to indicate the user that should be logged in would work great! Sending a user's password would be very, very bad.
JWT works by simply encoding a string made up of a small JSON object and hashing it using a secret shared between the two parties. The algorithm is configurable, but is usually HMAC SHA-256. So how do we do this in practice? We'll take a look at a simple example of an email action link. Let's say we have a new social network and we're sending an email for someone to confirm a friend request. The information we want to send might look something like this:
{ "user_id":12345, "friend_id":23456 }
Of course, we can't just send a link that would, without any verification, friend one user ID to another. So we'll need to use JWT to sign it! Our example here will be in Ruby, and you'll need the jwt gem in your Gemfile.
You would then send the above link in the email and let the user know that if they click it they'll accept the friend request of the user represented by friend_id. The user then clicks the button. So how do we verify this when the link is clicked?
get '/emails/friend' do payload = JWT.decode(params[:jwt], EMAIL_SECRET) User.find(payload["user_id"]).add_friend!(payload["friend_id"]) "You accepted the friend request!" end
That's all there is to it! Now the users are friends and there was no complicated login process needed! Of course, there are security concerns with this approach. As it stands, there's nothing stopping someone from "replaying" this token at a later date. If the users stop being friends but the same URL is visited a year later, the link will still work. JWT comes with a few different recommended ways to mitigate this:
You can include an iat claim in your payload that is a UNIX timestamp of when the token was issued. The decoder should then check that this timestamp is within a certain valid window or otherwise reject it.
You can include an exp claim in your payload that is a UNIX timestamp indicating when the token will expire. The decoding end should check that the current time is before the expiration and otherwise reject the token.
You can assign a unique value to the jti claim. This way, the decoding end can check to make sure that the token has never been consumed before, making sure that it is one-use.
There are a few other registered claim names that might come in handy depending on your usage.
That's really all there is to it. There are JWT libraries available for most languages, and they're all very simple to use. JWT is a fantastic and simple way to communicate trusted information across untrusted channels. Hope you find a good use for it soon!
Heart attacks have been the leading cause of death among women and men since 1921[1]—it kills over 600,000 people each year[2]. Sister to Sister Foundation has been working for almost 15 years to empower women to overcome this highly treatable disease through awareness, health screenings, and behavioral change. Recently, they realized that they needed to overhaul their digital strategy to reach more women and be a market leader in women’s health. Enter Mobomo.
Sister to Sister has contracted Mobomo to start the revolution. Together, we’re designing and executing a strategy that empowers a community of women through outreach, social media engagement, and technology. Starting with American Heart Month (February 2014), Sister to Sister will launch a new suite of tools and activities to engage women and start moving the needle towards healthier women.
We believe with Mobomo as their partner, Sister to Sister will be dancing its way to 10x growth across all their key metrics. So get ready. The heart revolution is coming.