“A game we don’t so much play, as desperately hope to survive” — Wil Wheaton
The virus germinated in our office last year. It scared me, it was that powerful. For long months we slaved over a hot microscope, refining and purifying the genetic code of the pathogen. Now, after a long incubation period, it’s ready for to infect the world. It’s called Pandemic: The Board Game and it’s infecting your iPad — today.
Pandemic for iPad is based on the board game Pandemic, the classic collaborative game with over 5 million copies sold around the world. It’s a game scary enough to freak out even Wil Wheaton, who featured it in an episode of TableTop watched by almost 500,000 people.
Here’s a teaser video, if you dare:
Working with original designer Matt Leacock, Z-Man Games and their new digital arm, F2Z Digital Media on this project has been inspiring.
All that remains now is for you to see if you can save the world.
Another Tuesday, another iOSKW development meetup under the belt! No matter how long you’ve been coding on iOS/iPhone/iPad/iWhatever, you can also pick up a few interesting things when you get together face to face with a group of cool developers. Here are three from this evening.
1. Storing images in a database is not evil
It’s common knowledge that you shouldn’t store images and other large files in a database table. Daniel MacKenzie begs to differ. He demonstrated how to use RestKit and Core Data to communicate with servers and store data online, which is available here. RestKit handles all of the communication and serialization details with the server, and automatically populates objects or core data models on the device. Daniel suggested that storing image data directly in the database, and even transmitting the images through compressed JSON, may in many cases be easier and faster than storing them separately in a service like S3.
2. It’s not hard to let users scribble in your app
At least, not with Michael Sgambelluri’s Draw View module, which is available here. It’s a self-expanding view, which you can scribble into, change colours, undo/redo, erase, and easily store the drawing as a UIImage for later use. Why wasn’t this a default UIKit component in the first place?
3. iOS 7’s minimalist interface isn’t just a copy of BB10
Or maybe it is. Opinions differ. As we covered highlights of the iOS 7 keynote from WWDC, some asserted that the changes were highly derivative. Others pointed out that in actual use, “in motion” as it were, the new UI has more depth to it than appears in still screen shots. Also, UIView physics is awesome.
Cheers, and see you on Sept 10 for the next instalment of iOSKW – Kitchener-Waterloo’s best (and only) iOS dev event.
Here at the Monolith Mansion in sunny Waterloo, Ontario, we have a video conferencing system to rival $20,000 custom installations for only a fraction of the cost. It allows us to conduct group teleconference meetings with clients, our staff at their home offices, and people around the world. Everyone around the table can be seen and heard, and can see and hear everyone at the other end(s). Here’s how you can make your own.
1. Microphone — Blue Yeti. The microphone is the key and under-appreciated component that makes teleconferencing work. Think about this: if I can hear you, but not see you, we can talk. But if I can see you but not hear you, then it’s hopeless. So, don’t spare the pennies on a cheap mic, or rely on something built into your camera. We have the Blue Yeti, and keep it set to omnidirectional. A USB extension cable connects it to the computer. The Blue Yeti can pick up anyone sitting around our board table up to about 6 feet distance, which is enough for 6-10 people to sit and comfortably talk around the table. Also, it looks totally cool.
2. Speakers. Sound matters! You need volume, oomph, and decent sound quality. No need to break the bank, a set of self-powered Cyber Acoustics Subwoofer Satellite System for example is currently less than $50. A subwoofer, surprisingly, helps a lot with speech comprehension. Place the speakers next to the camera and away from the microphone, or make sure that the mic if it’s directional is pointed away from the speakers. Otherwise you will get annoying echoes or feedback.
3. Camera — Logitech HD Pro Webcam. For videoconferencing the camera needs to give a sharp and, most importantly, wide-angle image. We have the Logitech HD Pro Webcam C910. It’s a few years old so a newer model may be available. It has a 78-degree wide angle lens, so that remote viewers can see more people around the table. Even wider would be better, if it becomes available.
4. Camera Mount — an inexpensive swing-arm lamp. You want to be able to adjust the camera so that you can point it in a certain direction, move it towards a certain person, or even point it down to use as a document camera. Instead of blowing thousands, just buy a $20 clamp-on desk lamp, remove the visor for the bulb, and tape the camera to the top. Now you can point it wherever you need. If you want to show off a mobile app as you present, just point the camera down, and hold the phone under the camera while projecting the video image onto your screen.
5. Projector. Projector technology is changing rapidly. We have an Epson EX7200 which is an old model. Don’t cheap out on the projector. Brightness is important, but the hidden X factor is noise. Projector fans are noisy and annoying during meetings. It’s a subliminal irritation that you don’t even notice until you turn it off. Probably within the next year or two, LED-bulb projectors will drop in cost and will be a bit quieter. For now, you could get a noise insulating box, or just live with it.
6. Projector Screen. We have a screen like this Epson Duet. It’s portable, and looks good too. White painted wall, or even reflective wall paint, just doesn’t work as well, it’s not bright enough.
7. Mac Mini with GotoMeeting. You need something to tie it all together. We run Mac Mini with some useful software installed. Aside from dropbox connected to our company account and other usual suspects, GotoMeeting is our goto videoconferencing system. Gotomeeting is payware and a not insubstantial $500-ish per year, but it’s actually reliable for both audio and video, including call in numbers, which is more than you can say for skype or google hangouts. It’s extremely rare that we have an A/V problems, dropped connections, serious lag, etc. Don’t waste 10-15 minutes each meeting trying to get everyone connected. This space is evolving rapidly with new players, so I wouldn’t be surprised if there’s some better and cheaper solution soon, but for now, Gotomeeting is the one.
People are amazed when they use our setup. I recently had a conference call with a woman in a rural part of Malawi, a country in the great lakes region of Africa. She was on a cell phone at the end of the dirt road. We had a dozen or so people sitting around the table and all talking to directly her as though she was in the room, with no need to feed questions through a moderator or strain to hear what she was saying. It was amazing to be talking so personally, in a group, with someone on the other side of the world.
One of the main reasons for developing mobile
applications, aside from building cool products and services, is making money.
Developers have been able to monetize apps through a purchase price, in-app
purchases and advertising. However, there are situations, such as dealing with
the sales of physical goods, which are not suitable for in-app
purchases. Stripe is the solution to this problem. Stripe is an
open-source platform that allows app developers to collect payments directly
from users without implementing an in-app purchase system.
One of Stripe’s greatest strengths is how it completes
most of the heavy lifting regarding security for you. The Stripe API and their
server complete the processing and storage of credit card information, which is
all PCI (Payment Card Industry) compliant. This means that all you have to do
is gather the necessary information, package it up with your server and send it
To accomplish this, client and server APIs are provided
web applications for the client side and several server languages including
Ruby, Python and PHP. I used the iOS tools with Ruby on Rails for the server so
experiences might vary when implementing on other platforms.
Now, before we dive into the code, let’s talk a bit more
about Stripe’s capabilities. With this system, you are able to set up
subscriptions for recurring billing and one-click purchases by storing
information previously entered by your customer. The best part of this, as
mentioned previously, is that Stripe stores and protects this information for
you. With your server, you can retrieve customer payment information at a later
date. This makes for an improved user experience.
Also, with respect to user experience, Stripe allows you
to customize your payment experience. You use Stripe code to process the
information but where/when the information is gathered and how the view is
designed is up to you. In iOS, a custom view created by Stripe is used to gather
and validate the important credit card information. This view can be dropped in
anywhere within your app when you’re ready to process the transaction.
I’m sure by now you’re thinking: “Okay, that’s great but
what is it going to cost me?” Stripe charges 2.9% + $0.30 per successful
transaction for their services. This includes everything, so there aren’t any
storage fees for keeping customer information on the server or a monthly fee to
use the APIs. The only other fee that you might incur is a $15 fee for a
chargeback if one of your customer’s complains to the bank. The transaction
fees are automatically taken when a transfer to your bank account occurs.
One of the downsides of this service is that funds are
not deposited into your account until 7 days after the transaction was
completed. According to the Stripe FAQ, this delay is used to help protect them
from various risks associated with the credit card industry. This may not
present an issue for your business if you have a steady flow of transactions, but
just keep this delay in mind. Another downside is that, at this time, only
companies in Canada or the U.S can use Stripe and therefore only Canadian and
U.S dollars are supported currencies. However, this restriction only applies to
businesses. You can accept payments from international customers as long as
they use a Visa, MasterCard or American Express card.
That should provide you with a good idea of what Stripe
is and what the system is capable. Let’s take a look at how everything works.
The lifecycle of a credit card transaction can be broken down into the
side app sends credit card information to the Stripe server
server returns a token representing this card
side app sends this token plus any necessary information (like name, address,
purchase amount) to your server
server creates a new charge based on this information and sends it to the
server charges the card and returns the result
server returns the result to the client app
The provided APIs handle all contact with the Stripe
server. This removes the complexities associated with securely transmitting
sensitive credit card information. The only communications that you have to be
worried with are the requests between your server and the client app. Stripe
recommends you use SSL to complete this part of the transaction.
Now I will outline the general steps required to
implement a simple Stripe system. I have created a simple shopping cart type of
application on iOS to help illustrate the capabilities of the system. You can
find it at:
Client Side (iOS App):
and create a new account
the Stripe iOS bindings and add them to your project
and programmatically add the STPView to your view controller (your test public
key can be found under Account Settings from the online dashboard)
token by sending information to the Stripe server
the token and extra information to your server
Server Side (Rails server):
1. Install the ‘stripe’ gem and add it to your Gemfile
2. Configure Stripe with your private authentication key
(found through the dashboard)
3. (optional) Create a new customer with the provided
4. Charge the card with the desired amount
5. Return the result to the client
For tutorials on how to write the code to implement this
system, take a look at the documentation: https://stripe.com/docs or the example
app. They provide detailed instructions on how to download and use
the APIs for your platform.
And that’s it! Hopefully you now see how easy it is to
get Stripe set up and configured. If you have any questions or concerns, feel
free to send me an email at email@example.com
Some time over the Holidays, Apple approved an update to our flagship app - Loop. To be fair, it’s not much of an “update” as it is an “extensive overhaul” of the underlying code, algorithms, and user interface. Loop is a musical app, but it’s also meditative/relaxing, so it’s been used in yoga studios, on the bedside table and it was even featured as part of an orchestral performance!
• Updated user interface with new menus and buttons
• Simplified, more focused user experience
• More efficient code for smoother visual and audio rendering
• All-new theme packs combining new sounds with new background images
• Now fully universal - works on normal/retina iPhones, iPads and iPod Touch - even the tall iPhone 5
• Brand new app icon and logo
Get it FREE from the App Store today!
Older blog posts